golang template
golang stdlib(标准函式库)中提供两种跟 template 有关的 package
text/template
html/template
来看看关於 html/template 的官方解释
https://golang.org/pkg/html/template/
Package template implements data-driven templates for generating textual output.
Package template 为了产生文本,实现了资料驱动模板
To generate HTML output, see package html/template, which has the same interface as this package but automatically secures HTML output against certain attacks.
为了产生 HTML 输出,可以看看 package html/template ,它与 text/template 拥有一样的接口,但会自动保护HTML输出,阻挡一些攻击
这麽一大串的英文主要讲得也就是 资料驱动编程这东东
而实际上的应用 ... 就直接进入 code 的部分吧
首先在 main 的外面宣告一个模板,他是一个 string
var demoString = "noChange1: {{.Value1}} \nnoChange2: {{.Value2}}"
我用了 \n 来换行
宣告一个 struct
type demoStruct struct {
Value1 int64
Value2 int64
}
在 func main() 中宣告一个 struct 值 的 址
注意:demoPointer 的型态为 *demoStruct
demoPointer := &demoStruct{
Value1: 9487,
Value2: 9453,
}
宣告一个 byte buffer
var tpl bytes.Buffer
使用 package html/template 的 must 方法产生 *template.Template
Parse 後,再使用 t.Execute 方法就可以完成给值
t := template.Must(template.New("").Parse(demoString))
if err := t.Execute(&tpl, demoPointer); err != nil {
fmt.Println(err)
return
}
最後,终於可以用 fmt.Println 印出来罗
完整程序码
package main
import (
"bytes"
"fmt"
"html/template"
)
var demoString = "noChange1: {{.Value1}} \nnoChange2: {{.Value2}}"
type demoStruct struct {
Value1 int64
Value2 int64
}
func main() {
demoPointer := &demoStruct{
Value1: 9487,
Value2: 9453,
}
var tpl bytes.Buffer
t := template.Must(template.New("").Parse(demoString))
if err := t.Execute(&tpl, demoPointer); err != nil {
fmt.Println(err)
return
}
fmt.Println(tpl.String())
}
输出为
noChange1: 9487
noChange2: 9453
注意变数的大小写会影响作用域&传递范围
It is impossible to track a phone's exact location...
相信有人已经迫不及待要撰写文章了,不过在这之前,我们先来介绍一下 Markdown 这个标记语言。 ...
前言 第一次参加铁人赛,很单纯的只是将自己学习的内容做整理记录,有很多不周全的地方,谢谢其他铁人们的...
成为公司的一份子大都是经由招募流程而加入的,但某一天团队需要扩大或是人手不足,而你刚好有机会可以参与...
感谢追踪我的所有人,如果你还要看有关资安的题材,欢迎在下面留言,我可能会更新在这里或是 blog。 ...