Go中如何遍历[]map[string]interface{}生成html表格

html/template我正在尝试使用in生成 HTML 内容Go。数据实际上是SELECT来自不同MySQL表的查询的输出。

我需要以下方面的帮助

  1. 能够生成 HTML 但无法拆分行。如何迭代result := []map[string]interface{}{}(我使用接口,因为列数和它的类型在执行之前是未知的)以表格格式呈现数据?

  2. 列和行不匹配

注意:目前result在 playground 链接中包含 2 张地图,应将其视为动态地图。它会根据目标表而改变。

这是 playground 链接,其中包含与我的用例匹配的示例数据。 https://go.dev/play/p/UTL_j1iRyoG

下面是输出 HTML,它将所有值添加为单行,这也不与 Columns 匹配。

<html>

    <head>

        <meta charset="UTF-8">

        <title>My page</title>

        <style>

        table, th, td {

          border: 1px solid black;

        }

        th, td {

          padding: 10px;

        }

        </style>

    </head>

    <body>

    <table>

        <tr>

        <th>Name</th><th>Colour</th>

        </tr>

        <tr>

        <td>Red</td><td>Apple</td><td>Banana</td><td>Yellow</td>

        </tr>

    </table>

    </body>

</html>


胡说叔叔
浏览 288回答 1
1回答

慕妹3242003

您可以执行以下操作:var cols []stringvar rows [][]interface{}for key, _ := range result[0] {&nbsp; &nbsp; cols = append(cols, key)}for _, res := range result {&nbsp; &nbsp; vals := make([]interface{}, len(cols))&nbsp; &nbsp; for i, col := range cols {&nbsp; &nbsp; &nbsp; &nbsp; vals[i] = res[col]&nbsp; &nbsp; }&nbsp; &nbsp; rows = append(rows, vals)}data := struct {&nbsp; &nbsp; Title&nbsp; &nbsp;string&nbsp; &nbsp; Columns []string&nbsp; &nbsp; Rows&nbsp; &nbsp; [][]interface{}}{&nbsp; &nbsp; Title:&nbsp; &nbsp;"My page",&nbsp; &nbsp; Columns: cols,&nbsp; &nbsp; Rows:&nbsp; &nbsp; rows,}并且需要相应地修改 HTML:<table>&nbsp; &nbsp; <tr>&nbsp; &nbsp; {{range .Columns}}<th>{{ . }}</th>{{else}}<div><strong>no rows</strong></div>{{end}}&nbsp; &nbsp; </tr>&nbsp; &nbsp; {{- range .Rows}}&nbsp; &nbsp; <tr>&nbsp; &nbsp; {{range .}}<td>{{ . }}</td>{{end}}&nbsp; &nbsp; </tr>&nbsp; &nbsp; {{- end}}</table>https://go.dev/play/p/MPJOMlfQ488请注意,在 Go 中,映射是无序的,因此循环result[0]聚合列名将产生一个无序的[]string.&nbsp;这意味着多次查看您的 HTML 页面的用户将看到不一致的输出。如果这是您想避免的事情,您可以选择使用 package 对列进行排序,或者您可以选择以某种方式sort保留顺序。sql.Rows.Columns
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go