【问题标题】:Golang: range through slice and generate HTML tableGolang:遍历切片并生成 HTML 表格
【发布时间】:2025-12-02 09:20:04
【问题描述】:

我有一个字符串切片,我想遍历切片并创建一个包含值的简单 HTML 表。这是一些示例代码来说明:

var tmpl = `<td>%s</td>`
names := []string{"john", "jim"}
    for _, v := range names {
      fmt.Printf(tmpl, v)
    }

这会产生:

&lt;td&gt;john&lt;/td&gt;&lt;td&gt;jim&lt;/td&gt;

我想获取返回的内容并创建一个 HTML 表格,或者至少能够将它传递给另一个具有表格结构的 HTML 模板。任何想法如何做到这一点?

【问题讨论】:

  • tvblah,谢谢你的回答,你知道是否有办法将多个变量传递给模板吗?下面的第二个解决方案只允许我传递切片,如果我有其他变量我想传递给模板,我该怎么做?

标签: go


【解决方案1】:

这是创建表的一种方法:

var tmpl = `<tr><td>%s</td></tr>`
fmt.Printf("<table>")
names := []string{"john", "jim"}
for _, v := range names {
      fmt.Printf(tmpl, v)
}
fmt.Printf("</table>")

你也可以使用 html/template 包:

t := template.Must(template.New("").Parse(`<table>{{range .}}<tr><td>{{.}}</td></tr>{{end}}</table>`))
names := []string{"john", "jim"}
if err := t.Execute(os.Stdout, names); err != nil {
  log.Fatal(err)
}

我没有足够的果汁来回答上面OP评论中的问题,所以我会在这里回答。

模板接受一个参数。如果您想将多个值传递给模板,请创建一个结构来保存这些值:

 var data struct{ 
    A int
    Names []string
 }{
    1,
    []string{"john", "jim"},
 }
 if err := t.Execute(os.Stdout, &data); err != nil {
   log.Fatal(err)
 }

在模板中使用 {{.A}} 和 {{.Name}}。

【讨论】: