Передать данные из MySQL в шаблон golang

я даю набор данных из 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 }}

Когда я смотрю в первый диапазон и даю мне значения $ как одну строку, а второй диапазон - это смерть.

В чем моя проблема?


person Moo    schedule 23.06.2016    source источник
comment
.Tabledata — это часть *Tasks, поэтому $key — это индекс, а $value — значение в $key. Но $values ​​имеет тип *Tasks, поэтому это не срез или массив, поэтому вы не можете зацикливаться на нем.   -  person jnmoal    schedule 24.06.2016
comment
Как я могу это сделать? У вас есть пример? :)   -  person Moo    schedule 24.06.2016


Ответы (1)


В вашем коде, поскольку вы не сказали, я предполагаю, что переменная «d» передается в шаблон. 'd' имеет тип Daten и, таким образом, содержит поле с именем TableData. Это поле представляет собой часть *Tasks. Вот почему в вашем шаблоне вы можете зацикливаться на нем, используя диапазон.

Ключевое слово range возвращает два значения: первое, «$key» в вашем коде, является индексом среза, а второе, «$values» в вашем коде, является значением, указанным TableData[$key]. Поскольку TableData — это срез типа *Tasks, это означает, что $values ​​имеет тип *Tasks. Так что это не массив и не срез.

Это означает, что вы не можете зацикливаться на $values, потому что это не срез. Но вы можете получить доступ ко всем экспортированным полям Задач. Итак, в зависимости от того, что вы хотите отобразить в своем шаблоне, вы можете сделать следующее:

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

Обратите внимание на заглавные буквы в имени поля, чтобы получить доступ к полю, оно должно быть экспортировано и, таким образом, начинается с прописной буквы в объявлении типа.

person jnmoal    schedule 24.06.2016