2017-10-09 72 views
0

我想打印出mysql数据库中的行为html。 这就是我想要达到的目标:Golang动态打印html行

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

我的Go代码:

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

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

我以为我可以把物品放入切片,并将它们写出来与一个for循环中的模板,但是可以用代码中的for循环写出每一行?

回答

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