模板:访问结构体slice的嵌套字段



我想使用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

相关内容

  • 没有找到相关文章