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 關注
- 96 瀏覽
添加回答
舉報