go text/template:缺少键不会影响内置的"index"函数

sqserrrh  于 4个月前  发布在  Go
关注(0)|答案(4)|浏览(48)

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语言本身的索引表达式不一致。

zbwhf8kr

zbwhf8kr2#

感谢您分享这个。我同意👍希望这个问题能得到解决。

8cdiaqws

8cdiaqws3#

Tricky.如果通过-1索引切片会发生什么?

mu0hgdu0

mu0hgdu04#

棘手。如果你通过-1索引一个切片会发生什么?
这个问题是什么意思?哈哈😄

  • 目前,如果切片为空,不会返回错误,它将用空字符串填充

相关问题