📅  最后修改于: 2023-12-03 15:01:02.172000             🧑  作者: Mango
在 Go 语言的开发中,模板是一个不可或缺的组件。Go 语言内置了文本模板和 HTML 模板两种类型的模板,并且都提供了非常易用的 API。
文本模板的处理非常简单,它会将输入的字符串中的所有 {{.}} 替换成对应的数据。例如,下面这个例子中将会把字符串 Hello {{.}}!
中的 {{.}}
替换成 "world"
:
package main
import (
"os"
"text/template"
)
func main() {
tmpl, _ := template.New("example").Parse("Hello {{.}}!")
tmpl.Execute(os.Stdout, "world")
}
输出:
Hello world!
上面的例子中,我们首先创建了一个模板 example
,然后用 Execute
方法执行模板。Execute 方法需要传入两个参数,第一个是用于输出的 IO 接口,第二个是模板需要的数据。
如果我们想要用多个数据填充模板,可以将第二个参数改成一个数组或一个结构体:
package main
import (
"os"
"text/template"
)
func main() {
tmpl, _ := template.New("example").Parse("Hello {{index . 0}} and {{index . 1}}!")
data := []string{"Alice", "Bob"}
tmpl.Execute(os.Stdout, data)
}
输出:
Hello Alice and Bob!
需要注意的是,.
表示当前的数据对象,可以使用 index . 0
的方式访问数组、切片和 map 中的元素。
HTML 模板比文本模板复杂一些,它同样支持占位符,不过还能处理模板嵌套和条件语句等功能。
下面是一个简单的例子,用于生成下拉框:
package main
import (
"os"
"html/template"
)
type Option struct {
Value string
Label string
}
type Select struct {
Name string
Options []Option
}
func main() {
tmpl := template.Must(template.New("example").Parse(`
<select name="{{.Name}}">
{{range .Options}}
<option value="{{.Value}}">{{.Label}}</option>
{{end}}
</select>
`))
data := Select{
Name: "fruit",
Options: []Option{
{"apple", "苹果"},
{"banana", "香蕉"},
{"orange", "橘子"},
},
}
tmpl.Execute(os.Stdout, data)
}
输出:
<select name="fruit">
<option value="apple">苹果</option>
<option value="banana">香蕉</option>
<option value="orange">橘子</option>
</select>
在上面的例子中,我们首先定义了两个结构体,一个用于表示下拉框的选项,另一个用于表示整个下拉框。然后通过 template.New
方法创建了一个模板对象,并且用 Must
方法包装起来,以便在出错时立即终止程序。
模板中的 {{range .Options}}
用于遍历 Select.Options
数组,并且通过 {{.Value}}
和 {{.Label}}
替换占位符。
关于模板的更多用法,可以参考 text/template 和 html/template 的官方文档。