模板:访问结构切片的嵌套字段
Templates: accessing nested fields of slice of structs
我想使用 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
我想使用 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