如何在Go的struct中定义数组以在for循环中调用并渲染到HTML
修复方案
问题1成因
你代码中每次循环都对user变量做整体赋值,每次新值会覆盖上一次的内容,循环结束后ProductsList只保留最后一次循环的赋值结果,所以页面仅输出最后一条商品。
问题2解决步骤
第一步:调整结构体字段类型
将ProductsList从字符串改为切片类型,存储所有商品数据:
type List struct { // 如果单个商品包含多个属性(如价格、分类等),可将[]string替换为对应的结构体切片,例如[]Product ProductsList []string }
第二步:修改循环赋值逻辑
循环中向切片追加数据,不要每次覆盖整个结构体:
func Home(w http.ResponseWriter, r *http.Request) { // 初始化结构体,预分配切片容量提升性能 user := List{ ProductsList: make([]string, 0, 34), } for i := 0; i < 34; i++ { // 追加当前遍历到的商品数据 user.ProductsList = append(user.ProductsList, products.AccessData(i)) } HomeTmpl.Execute(w, user) }
第三步:模板遍历渲染
在HTML模板中使用range遍历切片,批量渲染所有商品:
<ul> {{range .ProductsList}} <li>商品:{{.}}</li> {{end}} </ul>
如果切片存的是商品结构体,将{{.}}替换为对应字段即可,例如{{.Name}}、{{.Price}}。
内容的提问来源于stack exchange,提问作者Di walwar
相关产品推荐
相关产品推荐

