1 回答
TA贡献1824条经验 获得超6个赞
您可以执行以下操作:
var cols []string
var rows [][]interface{}
for key, _ := range result[0] {
cols = append(cols, key)
}
for _, res := range result {
vals := make([]interface{}, len(cols))
for i, col := range cols {
vals[i] = res[col]
}
rows = append(rows, vals)
}
data := struct {
Title string
Columns []string
Rows [][]interface{}
}{
Title: "My page",
Columns: cols,
Rows: rows,
}
并且需要相应地修改 HTML:
<table>
<tr>
{{range .Columns}}<th>{{ . }}</th>{{else}}<div><strong>no rows</strong></div>{{end}}
</tr>
{{- range .Rows}}
<tr>
{{range .}}<td>{{ . }}</td>{{end}}
</tr>
{{- end}}
</table>
https://go.dev/play/p/MPJOMlfQ488
请注意,在 Go 中,映射是无序的,因此循环result[0]
聚合列名将产生一个无序的[]string
. 这意味着多次查看您的 HTML 页面的用户将看到不一致的输出。如果这是您想避免的事情,您可以选择使用 package 对列进行排序,或者您可以选择以某种方式sort
保留顺序。sql.Rows.Columns
- 1 回答
- 0 关注
- 287 浏览
添加回答
举报