首页 > 后端开发 > Golang > 如何在 Go 模板之间高效传递多个值?

如何在 Go 模板之间高效传递多个值?

Mary-Kate Olsen
发布: 2024-12-09 14:09:16
原创
240 人浏览过

How to Efficiently Pass Multiple Values Between Go Templates?

在 Go 中将多个值从一个模板传递到另一个模板:综合指南

如何熟练地将多个值从一个模板传递到另一个模板去?考虑提供的上下文:

  • 城市结构:{ID int,名称字符串,区域 []Region}
  • 区域结构:{ID int,名称字符串,商店 []目的地, Masters []Master,EducationCenters []Destination}

在 main 函数中,我执行了带有 CityWithSomeData 的模板 citys.gohtml:

tpl.ExecuteTemplate(resWriter, "cities.gohtml", CityWithSomeData)
登录后复制

在模板中,我的目标是迭代城市和地区以将数据传递到另一个模板数据:

{{range .}}
        {{$city:=.Name}}
            {{range .Regions}}
                      {{$region:=.Name}}
                      {{template "data" .Shops $city $region}}
            {{end}}
{{end}}
登录后复制

解决方案

根据 Go 模板文档, {{template}} 操作的语法允许传递只有一个可选数据值。要传递多个值,我们需要首先将它们封装成单个值,例如映射或结构体。

由于在模板中编写 Go 代码不可行,因此我们可以注册一个自定义函数来执行此操作任务:

func Wrap(shops []Destination, cityName, regionName string) map[string]interface{} {
    return map[string]interface{}{
        "Shops":      shops,
        "CityName":   cityName,
        "RegionName": regionName,
    }
}
登录后复制

使用 Template.Funcs() 注册自定义函数。然后,我们修改模板以调用 Wrap() 函数:

{{define "data"}}
    City: {{.CityName}}, Region: {{.RegionName}}, Shops: {{.Shops}}
{{end}}
{{- range . -}}
        {{$city:=.Name}}
        {{- range .Regions -}}
              {{$region:=.Name}}
              {{- template "data" (Wrap .Shops $city $region) -}}
        {{end}}
{{- end}}
登录后复制

最后,演示这些概念的示例代码:

t := template.Must(template.New("cities.gohtml").Funcs(template.FuncMap{
    "Wrap": Wrap,
}).Parse(src))
CityWithSomeData = [...cities]
if err := t.ExecuteTemplate(os.Stdout, "cities.gohtml", CityWithSomeData); err != nil {
    panic(err)
}
登录后复制

这种方法允许高效传递多个值在 Go 中从一个模板到另一个模板。

以上是如何在 Go 模板之间高效传递多个值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板