【问题标题】:What is the best way to create an array and loop in template file在模板文件中创建数组和循环的最佳方法是什么
【发布时间】:2026-02-21 13:00:02
【问题描述】:

我在我的 Go 项目中使用 Gin gonic,在我的 footer.tmpl 中,我将有超过 10++ 个导航链接,而不是多次写 'link',如果我创建一个数组会容易得多包含链接、标题和循环,对吧?

问题是我研究过的,Golang 没有内置函数来在视图文件 (.tmpl/.html) 中声明数组/映射变量。

为什么要把数组放在视图文件里面是因为这个footer.tmpl会包含在几乎所有其他页面中,如果我必须在控制器里面写数组并传递变量,那就太麻烦了将数组参数传递给所有页面。

这是我的 Golang 代码:

r.GET("/", func(c *gin.Context) {   
    tmpl := template.Must(template.ParseFiles("templates/layout.tmpl", "templates/index.tmpl", "templates/common/header_a.tmpl", "templates/common/footer_a.tmpl"))
    r.SetHTMLTemplate(tmpl)

    var hometabList = []HomeTab{
        HomeTab{Title: "Tab1", Value: 1},
        HomeTab{Title: "Tab2", Value: 2},
        HomeTab{Title: "Tab3", Value: 3},
    }

    c.HTML(200, "layout", gin.H {
        "tab": hometabList,
        "product": "123",
    })
})

我是一名迁移到 Go 的 PHP 开发人员,在 PHP 中,您可以在视图中执行此操作:

view.php
<body>
    <?php 
    $arr_link = ['link1', 'link2', 'link3'];
    for($i = 0; $i < count($arr_link); $i++): ?>
        <div><a><?= $arr_link[$i]; ?></a></div>
    <?php endfor; ?>
</body>

通过这样做,当我在另一个页面中包含此页脚时,维护代码会更容易。

【问题讨论】:

标签: arrays go go-gin go-map


【解决方案1】:

您可以在模板中使用 范围

{{range .YourListItems}}
  <div><a href="{{.Url}">{{.Name}}</a></div>
{{end}}

【讨论】:

  • 您可以在这里找到更多信息golang.org/pkg/html/template
  • 感谢您的回答,但问题是如何在模板视图中实例化 .YourListItems?因为如果不是,那么我必须手动将 .YourListItems 一个一个地传递给我的所有模板,这在我有 30-40 个模板时很麻烦。虽然如果我可以在模板本身中创建变量,我只需要在模板中编写一次
  • @Charas 这里有一个关于如何实现range 的工作示例:*.com/a/21303045/1035977
最近更新 更多