首頁  >  文章  >  後端開發  >  如何在go中增量寫入html模板

如何在go中增量寫入html模板

WBOY
WBOY轉載
2024-02-06 09:50:08685瀏覽

如何在go中增量寫入html模板

問題內容

我正在建立一個基於 web 的資料瀏覽器,名為 mavgo flight。 我希望 sqlite 中的大型表能夠連續列印,而不是僅在所有資料可用時才列印的預設行為。我嘗試按每行資料運行模板,但失敗了。

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)
    }
}

正確答案


我放棄了聰明,完全按照 cerise 的建議去做 增量寫入行的函數:

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)

}

以上是如何在go中增量寫入html模板的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除