Golang动态打印html行

时间:2017-10-09 21:17:41

标签: html mysql go

我想从mysql db中打印出来的行为html。 这就是我想要实现的目标:

<html>
<head>
...
</head>
<body>
<a href = "url1">name1</a>
<a href = "url2">name2</a>
...
</body>
</html>

我的代码:

for rows.Next() {
    var name string
    var url string

    err = rows.Scan(&name, &url)
    if err != nil {
        log.Fatal(err)
    }
}

我认为我可以将这些项放入切片中并在模板中使用for循环将其写出来,但是这样可以在go代码中用for循环写出每一行吗?

1 个答案:

答案 0 :(得分:0)

这是可能的,但不是一个好主意。模板包可用于转义可能触及用户输入的内容,并且不难使用。只需做一些事情,并在模板中对它们进行测距。

这比尝试在代码中构建html更安全,因为上下文包知道例如转义url或js,而不是html,并考虑变量的位置。

https://play.golang.org/p/JEIjPT5ayP

package main

import (
    "log"
    "os"
    "text/template"
)

var t = `
<html>
<head>
...
</head>
<body>
{{range . }}
  <a href = "{{.URL}}">{{.Name}}</a>
{{end}}
</body>
</html> 
`

type Location struct {
    Name string
    URL  string
}

func main() {

    // Insert read data code here
    data := []Location{{Name: "example", URL: "https://example.com"}}

    tmpl, err := template.New("foo").Parse(t)
    if err != nil {
        log.Fatal(err)
    }

    err = tmpl.Execute(os.Stdout, data)
    if err != nil {
        log.Fatal(err)
    }
}