Go 模板
Source: Dev.to
什么是 Go 模板?
Go 模板是一种在 Go 中通过将数据与纯文本或 HTML 文件混合来创建动态内容的方式。它们允许你用 Go 代码提供的值替换模板中的占位符,从而轻松生成依赖用户输入或数据库内容的页面。
模板只是一个包含使用双大括号 {{ }} 编写的占位符的文件。例如,{{ .Name }} 会插入传递给模板的数据对象中的 Name 字段。点号 (.) 代表根数据对象。
定义数据结构
通常你会定义一个结构体(或 map)来保存想要显示的数据:
type PageData struct {
Title string
Message string
}
模板文件示例
下面是一个简单的 HTML 模板,演示了 Go 模板的多个特性,如变量插值、条件语句和循环:
{{ .Title }}
## {{ .Title }}
{{ .Message }}
{{ if .IsLogged }}
Welcome back, {{ .User }}!
{{ else }}
Please login to continue.
{{ end }}
## Your Tasks:
{{ range .Tasks }}
- {{ . }}
{{ else }}
- No tasks available.
{{ end }}
在 Go 代码中使用模板
下面的 Go 程序解析上述模板文件,并使用 PageData 实例执行它:
package main
import (
"html/template"
"net/http"
)
type PageData struct {
Title string
Message string
IsLogged bool
User string
Tasks []string
}
func handler(w http.ResponseWriter, r *http.Request) {
data := PageData{
Title: "Go Templates Advanced Example",
Message: "Using conditions and loops in templates",
IsLogged: true,
User: "Ian",
Tasks: []string{
"Learn Go templates",
"Build a web app",
"Practice Go daily",
},
}
tmpl := template.Must(template.ParseFiles("index.html"))
tmpl.Execute(w, data)
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
小结
Go 模板让你能够将表现层(HTML 或文本)与业务逻辑分离,使用不同的数据复用布局,并高效地构建动态网页、报告或任何基于文本的内容。它们支持基本的逻辑,如条件语句、循环和内置函数(例如 len),在保持代码简洁可维护的同时提供了灵活性。