2015-04-05 99 views
1

我有一個字符串切片,我希望通過切片範圍並創建一個帶有值的簡單HTML表格。這是一些示例代碼來說明:Golang:通過切片生成範圍並生成HTML表格

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

這將產生:

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

我想借此所返回什麼,並創建一個HTML表,或至少能將它傳遞給另一個具有表結構的HTML模板。任何想法如何做到這一點?

+0

tvblah,謝謝你的回答,你知道有沒有辦法將多個變量傳遞給模板?下面的第二個解決方案只允許我傳遞片段,如果我有其他變量我想傳遞給模板,那我該怎麼做呢? – jwesonga 2015-04-05 21:58:40

回答

1

下面是創建一個表的一種方法:

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

您也可以使用HTML /模板包:

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

我沒有足夠的果汁來回答OP的評論上面的問題,所以我會在這裏回答。

模板只有一個參數。如果你想多值傳遞給一個模板,然後創建一個結構來保存值:

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

使用{{.A}}和{{請將.Name}}在模板中。