missingkey
选项的文档说明:
missingkey:在执行过程中,如果Map中的键不存在于Map中,控制行为。
听起来它可能也适用于index
内置函数,但只适用于.X.Y.Z
语法。
https://go.dev/play/p/ZneXhxfIBWT
package main
import (
"fmt"
"io"
"text/template"
)
func f(text string) {
fmt.Println(text)
t := template.Must(template.New("").Option("missingkey=error").Parse(text))
err := t.Execute(io.Discard, map[string]any{})
fmt.Println(err)
fmt.Println()
}
func main() {
f(`{{ .Foobar }}`)
// template: :1:3: executing "" at <.Foobar>: map has no entry for key "Foobar"
f(`{{ index . "Foobar" }}`)
// <nil>
}
很难说这是行为错误,还是只是文档中的歧义。尽管我有一些用例,其中missingkey
应用于index
内置函数是更可取的(如果Map键不是有效的标识符,则替换.X.Y.Z
),但这确实与Go语言本身的索引表达式不一致。
4条答案
按热度按时间ws51t4hk1#
CC @robpike
zbwhf8kr2#
感谢您分享这个。我同意👍希望这个问题能得到解决。
8cdiaqws3#
Tricky.如果通过-1索引切片会发生什么?
mu0hgdu04#
棘手。如果你通过-1索引一个切片会发生什么?
这个问题是什么意思?哈哈😄