Go语言向模板传递对象数组失败,请求技术帮助
问题解决:Go模板无法渲染对象数组
核心原因
Go的模板引擎只能访问导出的字段(即字段名首字母大写),如果结构体字段是小写开头,模板会无法读取该字段的值;同时如果执行模板时未捕获错误,会导致问题被隐藏。
解决方案
- 修正结构体字段为导出类型
将folder结构体的字段名改为首字母大写,确保模板可以访问:
// 定义带导出字段的结构体 type folder struct { FolderName string // 首字母大写,允许模板访问 Path string }
- 添加模板执行错误检查
执行模板时捕获错误,避免出错却无法定位问题:
foldersVar := []folder{ folder{FolderName: "OP10", Path: "C:op10"}, folder{FolderName: "OP14", Path: "C:op14"}, } // 执行模板并检查错误 err := _template.Execute(&body, struct { Test string Folders []folder }{ Test: "Prueba", Folders: foldersVar, }) if err != nil { log.Printf("模板执行失败: %v", err) return } err = smtp.SendMail(hostAndport, auth, from, to, body.Bytes())
- 确认模板语法有效性
你的模板代码语法本身没有问题,只要结构体字段完成导出修改,{{ range .Folders }}就能正常遍历数组,渲染每个元素的FolderName值。
验证效果
修改完成后,模板会正确渲染出两个<li>元素,分别显示OP10和OP14。
内容的提问来源于stack exchange,提问作者Saul Espinoza
相关产品推荐
相关产品推荐

