发布于2026-07-11 阅读(0)
扫一扫,手机访问
本文详解如何将 MySQL 查询得到的结构体指针切片(如 []*Tasks)安全、清晰地传递并渲染到 Go HTML 模板中,避免因字段未导出或误用嵌套 range 导致模板渲染失败。
不少开发者都有这样的经历:从 MySQL 查出一堆数据,传到 Go 模板里,结果要么所有值混在一起,要么内层 range 直接没反应。原因其实很简单——Go 模板的 range 只认 slice、array、map 或 channel,而单独的 *Tasks 是个结构体指针,不是可遍历的类型。所以 {{range $values}} 会静默罢工,而且如果字段首字母小写,模板压根看不到它的值。
第一步,把 Tasks 结构体的字段全部改成导出(首字母大写),不然模板完全拿不到值。代码示例如下:
type Tasks struct { Tid int `json:"tid"` Pid int `json:"pid"` Uid int `json:"uid"` Del int `json:"del"` Finisch int `json:"finisch"` Open int `json:"open"` Inprocess int `json:"inprocess"` Abnahme int `json:"abnahme"` Fertig int `json:"fertig"` Finischdatum string `json:"finischdatum"` Erstellt string `json:"erstellt"` Start string `json:"start"` Ende string `json:"ende"` Name string `json:"name"` Beschreibung string `json:"beschreibung"`}⚠️ 注意:Go 中只有首字母大写的字段才是导出字段(exported),才能被模板、JSON 编码等外部包访问。小写字段(如 tid、name)在模板中视为不可见。
第二步,模板里不要对 *Tasks 用 range,直接通过点号访问字段:
{{ range $index, $task := .Tabledata }} // 数据库查询与结构体填充(注意 Scan 字段顺序与结构体导出字段严格一致)rows, err := db.Query("SELECT tid,pid,uid,del,finisch,open,inprocess,abnahme,fertig,finischdatum,erstellt,start,ende,name,beschreibung FROM tasks WHERE pid=? AND del=0", pid)if err != nil { log.Fatal(err)}defer rows.Close()var tasks []*Tasksfor rows.Next() { t := new(Tasks) // 注意:Scan 参数顺序必须与 SELECT 字段顺序、结构体字段声明顺序完全一致 err := rows.Scan( &t.Tid, &t.Pid, &t.Uid, &t.Del, &t.Finisch, &t.Open, &t.Inprocess, &t.Abnahme, &t.Fertig, &t.Finischdatum, &t.Erstellt, &t.Start, &t.Ende, &t.Name, &t.Beschreibung, ) if err != nil { log.Printf("scan error: %v", err) continue } tasks = append(tasks, t)}// 渲染模板data := Daten{Tabledata: tasks}err = tmpl.Execute(w, data) // 假设 tmpl 已解析,w 是 http.ResponseWriterif err != nil { http.Error(w, err.Error(), http.StatusInternalServerError)}总的来说,Go 模板不是自动反射遍历对象,它严格依赖类型规则:
✅ 用 range 遍历 slice(如 []*Tasks),得到索引和 *Tasks 实例;
✅ 用 . 访问导出结构体字段(如 {{.Name}});
❌ 不可用 range 遍历单个结构体或指针;
❌ 小写字段在模板中不可见,且没有任何提示——这是最隐蔽的坑。
修正字段导出 + 显式模板取值,即可稳定渲染 MySQL 多行数据。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8