登录
首页 >  Golang >  Go问答

Go Template : 一起使用嵌套结构的字段和 {{range}} 标签

来源:Golang技术栈

时间:2023-04-07 13:24:14 193浏览 收藏

一分耕耘,一分收获!既然都打开这篇《Go Template : 一起使用嵌套结构的字段和 {{range}} 标签》,就坚持看下去,学下去吧!本文主要会给大家讲到golang等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

我有以下嵌套结构,我想在模板中的{{range .Foos}}标签中迭代它们。

type Foo struct {
    Field1, Field2 string
}

type NestedStruct struct {
    NestedStructID string
    Foos []Foo
}

我正在尝试使用以下 html/模板,但它无法访问NestedStructIDfrom NestedStruct

{{range .Foos}} { source: '{{.Field1}}', target: '{{.NestedStructID}}' }{{end}}

golang模板有什么办法可以做我想做的事吗?

正确答案

您无法NestedStructID像这样到达该字段,因为该{{range}}操作将每次迭代中的管道(点.)设置为当前元素。

您可以使用$which 设置为传递给的数据参数Template.Execute();所以如果你传递一个值NestedStruct,你可以使用$.NestedStructID.

例如:

func main() {
    t := template.Must(template.New("").Parse(x))

    ns := NestedStruct{
        NestedStructID: "nsid",
        Foos: []Foo{
            {"f1-1", "f2-1"},
            {"f1-2", "f2-2"},
        },
    }
    fmt.Println(t.Execute(os.Stdout, ns))
}

const x = `{{range .Foos}}{ source: '{{.Field1}}', target: '{{$.NestedStructID}}' }
{{end}}`

输出(在Go Playground上试试):

{ source: 'f1-1', target: 'nsid' }
{ source: 'f1-2', target: 'nsid' }

这记录在text/template

开始执行时,$ 设置为传递给 Execute 的数据参数,即设置为 dot 的起始值。

好了,本文到此结束,带大家了解了《Go Template : 一起使用嵌套结构的字段和 {{range}} 标签》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表