解析模板文件
func (t *Template) Parse(src string) (*Template, error)
func ParseFiles(filenames ...string) (*Template, error)
func ParseGlob(pattern string) (*Template, error)
当然也可以使用func New(name string) *Temolate
函数创建一个名为name
的模板,然后对其调用方法去解析字符串或模板文件。
模板渲染
渲染模板简单来说就是使用去填充模板。
func (t *Template) Execute(wr io.Writer, data interface{
}) error
func (t *Template) ExecuteTemplate(wr io.Writer, name string, data interface{
}) error
举一个例子:
我们按照GO模板语法创建一个hello.html
的模板文件,当然也可以创建hello.tmpl
或者hello.tpl
。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>Hello,{
{
.Name }}</p>
<p>Hello,{
{
.Gender }}</p>
<p>Hello,{
{
.Age }}</p>
</body>
</html>
然后进行解析和渲染。
创建一个main.go
文件。
type UserInfo struct {
Name string
Gender string
Age int
}
func sayHello(w http.ResponseWriter, r *http.Request) {
// 解析指定文件生成模板对象
tmpl, err := template.ParseFiles("./hello.html")
if err != nil {
fmt.Println("create template failed, err:", err)
return
}
// 利用给定数据渲染模板,并将结果写入w
user := UserInfo{
Name: "林苏泽",
Gender: "男",
Age: 18,
}
tmpl.Execute(w, user)
}
// main.go
func main() {
http.HandleFunc("/", sayHello)
err := http.ListenAndServe(":9000", nil)
if err != nil {
fmt.Println("HTTP server failed,err:", err)
return
}
}
然后运行访问9000
端口
先build,然后运行生成exe文件即可。每次修改都需要重新build一边。
其中{
{.}}
是要替换的内容,就是需要渲染的地方。
我们传入变量是map时,也可以通过模板文件.
根据key来渲染。
// 利用给定数据渲染模板,并将结果写入w
user := UserInfo{
Name: "林苏泽",
Gender: "男",
Age: 18,
}
m1 := map[string]interface{
}{
"Name": "林素",
"Gender": "男",
"Age": 18,
}
tmpl.Execute(w, map[string]interface{
}{
"user": user,
"m1": m1,
})
}