我想从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循环写出每一行吗?
答案 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)
}
}