Heim >Backend-Entwicklung >Golang >So schreiben Sie schrittweise eine HTML-Vorlage in Go

So schreiben Sie schrittweise eine HTML-Vorlage in Go

WBOY
WBOYnach vorne
2024-02-06 09:50:08705Durchsuche

So schreiben Sie schrittweise eine HTML-Vorlage in Go

Frageninhalt

Ich baue einen webbasierten Datenbrowser namens Mavgo Flight. Ich möchte, dass große Tabellen in SQLite kontinuierlich gedruckt werden, anstatt standardmäßig nur zu drucken, wenn alle Daten verfügbar sind. Ich habe versucht, die Vorlage pro Datenzeile auszuführen, aber es ist fehlgeschlagen.

func renderHTMLTable(w http.ResponseWriter, result *sqlx.Rows) {
    cols, err := result.Columns()
    if err != nil {
        log.Println(err, "renderHTMLTable")
        return
    }
    tmpl, err := template.ParseFiles("./templates/2d.html")
    if err != nil {
        log.Println("template failed", err)
        return
    }
    data := HTMLTable{}
    data.Cols = cols
    for result.Next() {
        cols, err := result.SliceScan()
        if err != nil {
            log.Println(w, err)
            break
        }
        s := make([]string, len(cols))
        for i, v := range cols {
            s[i] = fmt.Sprint(v)
        }
        tmpl.Execute(w, s)
    }
}

Richtige Antwort


Ich habe es aufgegeben, schlau zu sein und habe genau das getan, was Cerise vorgeschlagen hat Funktion zum inkrementellen Schreiben von Zeilen:

func renderHTMLTable(w http.ResponseWriter, result *sqlx.Rows) {
cols, err := result.Columns()
if err != nil {
    log.Println(err, "renderHTMLTable")
    return
}
head, err := template.ParseFiles("./templates/head.html")
if err != nil {
    log.Println("template failed", err)
    return
}
row, err := template.ParseFiles("./templates/row.html")
if err != nil {
    log.Println("template failed", err)
    return
}
foot := `  </tbody>
</table>
</div>

</body>
</html>`
head.Execute(w, cols)
s := make([]string, len(cols))
for result.Next() {
    values, err := result.SliceScan()
    if err != nil {
        log.Println(w, err)
        break
    }

    for i, v := range values {
        s[i] = fmt.Sprint(v)
    }
    row.Execute(w, s)
}
fmt.Fprint(w, foot)

}

Das obige ist der detaillierte Inhalt vonSo schreiben Sie schrittweise eine HTML-Vorlage in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen