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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:54:08