我期待
t, err := template.New("t1").Option("missingkey=error").Parse("{{index . \"/foo/bar\"}}")
err = t.Execute(os.Stdout, d)
如果地图’d’没有键’/ foo / bar’,则返回错误,但一切都很好.我错过了什么吗?
这是去游乐场:
http://play.golang.org/p/Oqg1Dy4h1k
最佳答案 missingkey选项不适用于索引.使用时,只有在访问地图时才能获得所需的结果.< field-name>:
t, err := template.New("t1").Option("missingkey=error").Parse(`{{.foo}}`)
err = t.Execute(os.Stdout, d)
您可以通过定义自己的索引函数来解决此问题,该函数在缺少键时返回错误:
package main
import (
"errors"
"fmt"
"os"
"text/template"
)
func lookup(m map[string]interface{}, key string) (interface{}, error) {
val, ok := m[key]
if !ok {
return nil, errors.New("missing key " + key)
}
return val, nil
}
func main() {
d := map[string]interface{}{
"/foo/bar": 34,
}
fns := template.FuncMap{
"lookup": lookup,
}
t, err := template.New("t1").Funcs(fns).Parse(`{{ lookup . "/foo/baz" }}`)
if err != nil {
fmt.Println("ERROR 1")
}
err = t.Execute(os.Stdout, d)
if err != nil {
fmt.Println("ERROR 2")
}
}