【go从零单排】Text Templates
🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。
📗概念
Go 中的文本模板(Text Templates)是通过 text/template 包提供的功能,允许开发者创建动态文本输出。这些模板可以用于生成 HTML、配置文件、报告等多种文本格式。
💻代码
Text Templates
package main
//导入了 os(用于处理操作系统功能)和 text/template(用于处理文本模板)包。
import (
"os"
"text/template"
)
func main() {
//创建一个新的模板 t1,并解析模板字符串 "Value is {{.}}\n"。其中 {{.}} 是一个占位符,表示传递给模板的数据。
t1 := template.New("t1")
t1, err := t1.Parse("Value is {{.}}\n")
if err != nil {
panic(err)
}
//使用 Must 方法确保模板解析成功。如果解析失败,会引发panic。这里又解析了一个模板字符串 "Value: {{.}}\n"。
t1 = template.Must(t1.Parse("Value: {{.}}\n"))
//执行模板 t1,将字符串 "some text" 传递给模板,输出结果为 Value: some text。
t1.Execute(os.Stdout, "some text")
//执行模板 t1,将整数 5 传递给模板,输出结果为 Value: 5。
t1.Execute(os.Stdout, 5)
//执行模板 t1,将字符串切片传递给模板,输出结果为 Value: [Go Rust C++ C#](切片会以字符串形式输出)。
t1.Execute(os.Stdout, []string{
"Go",
"Rust",
"C++",
"C#",
})
//定义一个名为 Create 的函数,用于创建和解析新的模板。它接受模板名称和模板字符串作为参数,并返回解析后的模板。
Create := func(name, t string) *template.Template {
return template.Must(template.New(name).Parse(t))
}
//使用 Create 函数创建模板 t2,模板字符串为 "Name: {{.Name}}\n"。
//这里的 {{.Name}} 表示要访问传递数据中的 Name 字段。
t2 := Create("t2", "Name: {{.Name}}\n")
//执行模板 t2,传递一个匿名结构体,输出结果为 Name: Jane Doe。
t2.Execute(os.Stdout, struct {
Name string
}{"Jane Doe"})
//执行模板 t2,传递一个字典(map),输出结果为 Name: Mickey Mouse。
t2.Execute(os.Stdout, map[string]string{
"Name": "Mickey Mouse",
})
//创建模板 t3,包含条件语句。{{if .}} 检查传入的数据是否为真值。
t3 := Create("t3",
"{{if . -}} yes {{else -}} no {{end}}\n")
//执行模板 t3,传递空字符串,输出结果为 no。
t3.Execute(os.Stdout, "not empty")
t3.Execute(os.Stdout, "")
//创建模板 t4,使用 {{range .}} 遍历传入的数据。
t4 := Create("t4",
"Range: {{range .}}{{.}} {{end}}\n")
//执行模板 t4,传递字符串切片,输出结果为 Range: Go Rust C++ C#。
t4.Execute(os.Stdout,
[]string{
"Go",
"Rust",
"C++",
"C#",
})
}
//输出
//Value: some text
//Value: 5
//Value: [Go Rust C++ C#]
//Name: Jane Doe
//Name: Mickey Mouse
//yes
//no
//Range: Go Rust C++ C#
🔍理解
- 模板:模板是包含占位符的文本字符串,这些占位符会在执行模板时被替换为实际值。
- 数据:模板执行时需要传入数据,这些数据可以是基本类型、结构体、切片、映射等。
- 在解析和执行模板时,建议使用 Must 函数来处理错误,这样可以在发生错误时立即引发panic,便于调试。
💡 Tips
模版方法
- 使用 template.New() 创建新模板
- Parse() 方法解析模板字符串
- 使用 Execute() 方法将数据传递给模板
- 使用 {{.}} 访问当前数据。
- 对于结构体,可以使用 {{.FieldName}} 来访问字段
模版其他功能
- 自定义函数:可以为模板添加自定义函数,使用 template.FuncMap。
- 模板嵌套:可以将一个模板嵌套在另一个模板中。
- 模板继承:可以通过定义基础模板并在其他模板中引用来实现模板的继承。
💪无人扶我青云志,我自踏雪至山巅。