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

Go后端渲染数据库数据到HTML提示can't evaluate field错误如何解决

错误原因

你在profile函数中传给模板的table变量是[]showregister类型(用户数据切片),但HTML模板直接访问.Namadepan,这个是单个showregister结构体才有的字段,切片本身没有该字段,因此触发报错。

解决方案

根据你的需求可二选一修改:

场景1:需要在页面展示所有注册用户

无需修改Go后端代码,只需调整HTML模板,使用range遍历传入的用户切片即可:

<div class="col-md-9" style="margin-top: 10px">
  <!-- range会遍历传入的用户切片,循环体内的.就是单个showregister结构体 -->
  {{range .}}
  <div class="user-item">
    <input type="text" class="form-control" value=""> 
    <p class="text-black">{{ .Namadepan }} {{ .Namabelakang }}</p>
    <!-- 如需展示其他字段,可按照相同格式添加,例如:
    <p>邮箱:{{.Email}} 年龄:{{.Usia}}</p>
    -->
  </div>
  {{end}}
</div>

场景2:仅需要展示单个用户信息

无需修改HTML模板,只需调整Go后端的profile函数,传入单个showregister结构体而非整个切片即可:

func profile(w http.ResponseWriter, r *http.Request){
    var tampile = template.Must(template.ParseFiles("./template/profile.html"))
    table := Showprofile()
    // 先判空避免切片为空时索引越界
    if len(table) == 0 {
        fmt.Fprintln(w, "暂无用户数据")
        return
    }
    // 这里改为传入切片中单个元素,示例取第一个元素,可根据业务逻辑调整取指定索引的元素
    var salahe = tampile.ExecuteTemplate(w, "Profile", table[0])
    if salahe!=nil {
        fmt.Println( salahe.Error() )
        return
    }
}
额外优化建议
  • 你的Showprofile函数中写了两次defer db.Close(),属于重复逻辑,删除第二次的即可
  • 函数中err != nil的判断分支是空的,建议补充错误日志打印,方便后续排查数据库查询相关问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:24:04