我想使用go模板输出slice[0].type
。而印刷工作:
{{ index .Slice 0 | printf "%+v" }} // {Type:api.Meter ShortType:Meter VarName:meter}
不打印字段:
{{ index .Slice 0 | .Type }} // template: gen:43:26: executing "gen" at <.Type>: can't evaluate field Type in type struct { API string; Package string; Function string; BaseTypes []main.baseType; Types map[string]main.typeStruct; Combinations [][]string }
错误消息指出计算的是外循环字段,而不是index
调用的结果。
访问片的嵌套字段的正确语法是什么?
printf
是一个内置模板函数。当您将index .Slice 0
链接到printf
时,该值将作为printf
的最后一个参数传递。访问Type
字段不是一个函数调用,你不能链接到它。链中的.Type
将对当前的"点"进行求值,链不会改变该点。
使用括号将切片表达式分组,然后应用字段选择器:
{{ (index .Slice 0).Type }}
测试示例:
type Foo struct {
Type string
}
t := template.Must(template.New("").Parse(`{{ (index .Slice 0).Type }}`))
params := map[string]interface{}{
"Slice": []Foo{{Type: "Bar"}},
}
if err := t.Execute(os.Stdout, params); err != nil {
panic(err)
}
哪个输出(在Go Playground上试试):
Bar