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

如何用Go的http/template与net/http在HTML中循环渲染数据?

Go模板数据传递问题解决

问题根源:结构体字段未导出

Go语言里只有首字母大写的标识符能被包外代码访问(也就是所谓的“导出字段”),你定义的Data结构体里allData是小写开头,属于未导出字段,模板引擎根本读不到它的值。这就是为啥{{.}}能打印整个结构体,但{{.allData}}拿不到数据的原因。

修复方法

1. 修改结构体字段为导出(首字母大写)

把Data结构体里的字段名改成首字母大写:

type Data struct {
    AllData []string // 首字母大写,变为可被外部访问的导出字段
}

2. 同步调整Handler中的赋值代码

创建Data实例时,字段名要和结构体定义对应:

data := Data{AllData: []string{"Add new", "jeff", "ffeej"}}

3. 更新HTML模板中的字段引用

模板里的.allData同步改为.AllData:

<section>
    {{range .AllData}}
        {{.}}<br> <!-- 可添加换行让每个元素单独显示,更清晰 -->
    {{end}}
</section>

额外提示

  • 以后用Go模板传递数据,所有需要在模板中访问的结构体字段、函数,都必须首字母大写,这是Go的语言规则,务必记住。
  • 建议给模板解析加上错误检查,避免隐藏问题:
    var err error
    tpl, err = template.ParseGlob("*.html")
    if err != nil {
        panic(err) // 或根据业务需求做更合理的错误处理
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:00:56