2017-10-09 15 views
0

私はHTMLとしてmysql dbから行を出力したいと思います。 これは私が達成したいものです。Golangは動的に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ループでそれらを書き出すことができると考えました代わりにforコードを使って各行をgoコードに書き出すことは可能ですか?

答えて

0

可能ですが、良い考えではありません。テンプレートパッケージは、ユーザの入力に触れた可能性があり、使いにくいものをエスケープするのに便利です。物をスライスしてテンプレート上で範囲を決めるだけです。

これは、コンテキストパッケージがhtmlではなくurlsや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) 
    } 
} 
関連する問題