我将mysql-database的数据集提供给go-template。结果有多行,但所有值都是一个字符串!?
type Tasks struct {
tid int
pid int
uid int
del int
finisch int
open int
inprocess int
abnahme int
fertig int
finischdatum string
erstellt string
start string
ende string
name string
beschreibung string
}
type Daten struct {
Tabledata []*Tasks
}
d := Daten{}
rows, err := db.Query("SELECT * FROM tasks WHERE pid=? AND del=0", pid)
checkError(err)
defer rows.Close()
rs := make([]*Tasks, 0)
for rows.Next() {
rst := new(Tasks)
err := rows.Scan(&rst.tid, &rst.pid, &rst.uid, &rst.del, &rst.finisch, &rst.open, &rst.inprocess, &rst.abnahme, &rst.fertig, &rst.finischdatum, &rst.erstellt, &rst.start, &rst.ende, &rst.name, &rst.beschreibung)
if err != nil {
log.Println(err)
}
rs = append(rs, rst)
}
d.Tabledata = rs
模板:
{{ range $key, $values := .Tabledata }}
<li><strong>{{ $key }}</strong>: </li>
{{range $values}}
{{.}}
{{end}}
{{ end }}
当我查看第一个范围并将$值作为一个字符串给我时,第二个范围是死亡。
我的问题是什么?
答案 0 :(得分:0)
在您的代码中,由于您没有告诉我,我猜这个变量&#39; d&#39;传递给模板。 &#39; d&#39;是Daten类型,因此包含一个名为TableData的字段。此字段是*任务的一部分。这就是为什么在你的模板中你可以使用范围循环。
range关键字返回两个值,第一个,&#39; $ key&#39;在你的代码中,是切片的索引,第二个是&#39; $ values&#39;在您的代码中是TableData [$ key]指向的值。因为TableData是* Tasks类型的切片,这意味着$ values的类型为* Tasks。所以不是数组也不是切片。
这意味着,您无法循环$值,因为它不是切片。但是,您可以访问任务的所有导出字段。因此,根据您要在模板中显示的内容,您可以执行以下操作:
// Inside the firts range
<li><strong>{{ $key }}</strong>: </li>
name: $values.Name
open: $values.Open
注意字段名称的大写字母,为了访问它将被导出的字段,因此在类型声明中以大写字母开头。