1 回答
TA贡献1798条经验 获得超3个赞
您可以使用每个枚举的方法注册模板函数Funcs,给它们与枚举常量相同的名称,然后通过简单地引用它们来调用模板中的函数。
即能够eq $v Admin在模板中执行以下操作:
type flag int
const (
Admin flag = iota + 1 // iota = 0
// ...
)
var funcMap = template.FuncMap{
"Admin": func() flag { return Admin },
// ...
}
var file = `{{ $v := . }}
{{- if eq $v Admin }}is admin{{ else }}is not admin{{ end }}
`
func main() {
t := template.Must(template.New("t").Funcs(funcMap).Parse(file))
for _, v := range []interface{}{Admin, 1234} {
if err := t.Execute(os.Stdout, v); err != nil {
panic(err)
}
fmt.Println("----------------")
}
}
https://play.golang.org/p/70O7ebuYuNX
is admin
----------------
is not admin
----------------
您还可以在标志类型上声明一个方法,并将该方法值用作模板函数,以使其更加整洁:
type flag int
func (f flag) get() flag { return f }
const (
Admin flag = iota + 1 // iota = 0
Editor
)
var funcMap = template.FuncMap{
"Admin": Admin.get,
"Editor": Editor.get,
// ...
}
var file = `{{ $v := . }}
{{- if eq $v Admin }}is admin{{ else }}is not admin{{ end }}
{{ if eq $v Editor }}is editor{{ else }}is not editor{{ end }}
`
func main() {
t := template.Must(template.New("t").Funcs(funcMap).Parse(file))
for _, v := range []interface{}{Admin, Editor, 1234} {
if err := t.Execute(os.Stdout, v); err != nil {
panic(err)
}
fmt.Println("----------------")
}
}
https://play.golang.org/p/4JLsqxoHs8H
is admin
is not editor
----------------
is not admin
is editor
----------------
is not admin
is not editor
----------------
- 1 回答
- 0 关注
- 75 浏览
添加回答
举报