You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go模板如何传递多个值?附结构体与模板代码示例

关于Go模板多值传递的问题解答

直接说结论:你当前的写法没办法实现预期的多值传递,Go模板的{{template}}动作有特定的参数传递规则,咱们来一步步理清楚问题和解决办法。

首先,Go标准库的模板语法里,{{template}}的正确用法是{{template "模板名" 单个数据源}}——它只接受一个"管道"参数,你后面跟着的$city和$region会被直接忽略,根本传不到data模板里去。

要实现多值传递,咱们有个简单直观的办法:把需要传递的多个值打包成一个map(用模板内置的dict函数),或者自定义一个匿名结构体,这样就能把多个值作为单个参数传递给子模板了。

针对你的场景,推荐用dict函数来打包,修改后的模板代码如下:

{{range .}} 
  {{$city := .Name}} 
  {{range .Regions}} 
    {{$region := .Name}} 
    <!-- 用dict把Shops、City、Region打包成一个map传递 -->
    {{template "data" (dict "Shops" .Shops "City" $city "Region" $region)}} 
  {{end}} 
{{end}}

对应的data子模板就可以通过键名来访问这些值了,比如:

{{define "data"}}
  <h3>城市:{{.City}} - 区域:{{.Region}}</h3>
  <ul>
    {{range .Shops}}
      <li>店铺:{{.Name}}(ID:{{.ID}})</li>
    {{end}}
  </ul>
{{end}}

另外补充一点:如果你用的是Go 1.18及以上版本,也可以自定义一个tuple类型来封装多个值,但dict函数是模板内置的,不需要额外写Go代码,对模板来说更轻量易用。

总结一下:Go模板不支持直接给template动作传多个参数,必须把多值封装成单一的复合类型(map或结构体),这是模板语法的硬性规则,按照上面的方式修改就能实现你想要的多值传递效果了。

内容的提问来源于stack exchange,提问作者user9314969

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:04:01