go - 将数据从 MySQL 提供给 golang 模板

标签 go go-templates

我将 mysql 数据库中的数据集提供给 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 }}

当我查看第一个范围并将 $values 作为一个字符串给我时,第二个范围是死亡。

我的问题是什么?

最佳答案

在你的代码中,由于你没有告诉,我猜变量“d”被传递给了模板。 'd' 是 Daten 类型,因此包含一个名为 TableData 的字段。该字段是 *Tasks 的一部分。这就是为什么在您的模板中您可以使用范围对其进行循环。

range关键字返回两个值,第一个,你代码中的'$key',是 slice 的索引,第二个,你代码中的'$values',是TableData[$key指向的值].因为 TableData 是 *Tasks 类型的 slice ,这意味着 $values 是 *Tasks 类型。所以既不是数组也不是 slice 。

这意味着,您不能在 $values 上循环,因为它不是 slice 。但是,您可以访问任务的所有导出字段。因此,根据您要在模板中显示的内容,您可以执行以下操作:

// Inside the firts range
<li><strong>{{ $key }}</strong>: </li>
name: $values.Name
open: $values.Open

注意字段名称的大写字母,为了访问它应该被导出的字段,因此在类型声明中以大写字母开头。

关于go - 将数据从 MySQL 提供给 golang 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38001650/

相关文章:

templates - 如何使用 Go 模板在单个语句中使用多个参数

file-io - 创建用于测试文件访问的大型 csv 文件

go - 如何在 Golang 构建中使用 -ldflags -X 设置包变量

go - 如果 env var 为空,如何分配默认值?

go - 为什么我的代码会死锁以及如何修复它

Golang 从包含的模板访问模板变量

kubernetes - 在Helm configMap中包含文件内容后如何控制缩进?

基于变量的 Golang 格式文本模板

go - 如何知道范围是否为空?

go - 在 `{{ template }}` 中使用 Go Template var