douyue7536 2015-04-05 19:34
浏览 318
已采纳

Golang:遍历切片并生成HTML表

I have a string slice, I'd like to range through the slice and create a simple HTML table with the values. This is some sample code to illustrate:

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

This produces:

<td>john</td><td>jim</td>

I'd like to take what's returned and create a HTML table or at least be able to pass it to another HTML template that has the table structure. Any ideas how this can be done?

</div>
  • 写回答

1条回答 默认 最新

  • doulupian8725 2015-04-05 19:47
    关注

    Here's one way to create a table:

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

    You can also use the html/template package:

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

    I do not have enough juice to answer the question in OP's comment above, so I'll answer it here.

    A template takes a single argument. If you want to pass multiple values to a template, then create a struct to hold the values:

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

    Use {{.A}} and {{.Name}} in the template.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)