Go Template 模板高级用法
Go About 1,293 words解析模板
var externalFs fs.FS
tmpl, err := template.ParseFS(externalFs, "*.gohtml")
if err != nil {
log.Fatal("template parse error:", err)
}
注册函数
使用Funcs
注册更多的函数,用于模板。
var externalFs fs.FS
var funcMap = map[string]any{
"contains": strings.Contains,
"hasPrefix": strings.HasPrefix,
"hasSuffix": strings.HasSuffix,
"loop": func(n int) []struct{} {
return make([]struct{}, n)
},
"add": func(i int, delta int) int {
return i + delta
},
}
tmpl, err := template.New("externalFs").Funcs(funcMap).ParseFS(externalFs, "*.gohtml")
if err != nil {
log.Fatal("template parse error:", err)
}
传递参数
type Attr struct {
Req *http.Request
Data any
Time time.Time
}
attr := Attr{
Req: r,
Data: data,
Time: time.Now(),
}
tmpl.ExecuteTemplate(os.Stdout, "post", attr)
{{.}}
.
代表传入的attr
变量。attr
中的字段可以继续使用.
来获取。
{{.}}
{{.Time}}
调用方法
方法的括号不用加。
{{.Time.Year}}
接收变量
将传入的attr
用$x
变量接收,$x
作用域在整个模板文件中有效。
{{ $x := . }}
逻辑与 逻辑或
and
、or
。
示例:如果1==1
并且2==2
{{ if and (eq 1 1) (eq 2 2) }}
{{ end }}
示例:如果1==2
或者2==2
,如果第一个条件满足了,就不会判断后面一个条件。
{{ if or (eq 1 2) (eq 2 2) }}
{{ end }}
. 作用域范围
if
、with
、range
中的.
会改变为这三个表达式中的对象。
示例:with
接收.Time
对象,代码块中.Year
的.
代表Time
对象。
{{ with .Time }}
{{.Year}}
{{ end }}
参考
Views: 686 · Posted: 2023-10-10
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...