如何用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
相关产品推荐
相关产品推荐

