参考中文文档
//a1.go
package main
import (
"html/template"
"log"
"net/http"
// "github.com/gin-gonic/gin"
)
func main() {
http.HandleFunc("/hello", hello)
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Println("HTTP server failed,err:", err)
return
}
}
func mysqr(a int) (int, error) {
return a * a, nil
}
func hello(w http.ResponseWriter, r *http.Request) {
// 解析指定文件生成模板对象
file := "./template/tmpl基本语法.go.tmpl"
jsfile:="./template/js.html"
// tmpl, err := template.ParseFiles(file,jsfile)
// 如果要自定义函数,使用下面的链式代码。否则使用上一行即可
tmpl, err := template.New("tmpl基本语法.go.tmpl").Funcs(template.FuncMap{"sqr": mysqr}).ParseFiles(file,jsfile)
// 下面这行代码不报错,但是页面不会显示任何内容。貌似New的参数只能是不带路径的文件名
// tmpl, err := template.New(file).Funcs(template.FuncMap{"sqr": mysqr}).ParseFiles(file,jsfile)
if err != nil {
log.Println("create template failed, err:", err)
return
}
// 利用给定数据渲染模板,并将结果写入w
user := UserInfo{
Name: "枯藤",
Gender: true,
Age: 18,
}
user2 := UserInfo{
Name: "枯藤2",
Gender: true,
Age: 182,
}
usermap := map[string]interface{}{
"Name": "枯藤map",
"Gender": false,
"Age": 22,
}
arr := []UserInfo{user, user2}
arr2 := []int{}
Res := map[string]interface{}{
"user": user,
"usermap": usermap,
"arr": arr,
"arr2": arr2,
}
tmpl.Execute(w, Res)
}
type UserInfo struct {
Name string
Gender bool
Age int
}
//template\tmpl基本语法.go.tmpl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{{template "js.html"}}
<title>Document</title>
</head>
<body>
<h3>普通的对象和map传值</h3>
{{sqr 6}}<br>
{{.user.Name}}
{{.user.Age}}
{{.user.Gender}}<br>
{{.usermap.Name}}
{{.usermap.Age}}
{{.usermap.Gender}}<br>
<h3>if</h3>
{{if gt 1 0}} 1>0 {{else if lt 1 0}} 1<0 {{else}} 1=0 {{end}}<br>
{{if gt 1 1}} 1>1 {{else if lt 1 1}} 1<1 {{else}} 1=1 {{end}}<br>
<h3>range</h3>
<ul>
{{range $i, $v := .arr}}
<li>{{$i}}:{{$v.Name}}</li>
{{else}}没有内容
{{end}}</ul><br>
<ul>
{{range $i, $v := .arr2}}
<li>{{$i}}:{{$v.Name}}</li>
{{else}}没有内容
{{end}}</ul><br>
{{template "inner.html"}}
</body>
</html>
{{define "inner.html"}}
<h1>inner.html</h1>
<ol>
<li>吃饭</li>
<li>睡觉</li>
<li>打豆豆</li>
</ol>
{{end}}
//template\js.html
<script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>