Golang模板中如何传递多个参数
Golang模板中如何传递多个参数 我是Go语言的新手,正在开发一个示例Web应用来熟悉这门语言。我需要向模板传递多个值。以下是运行良好的代码,我在模板中显示了标签数据。目前我向模板传递了"labels",但还需要传递一个cookie值。谢谢
func createLabels(w http.ResponseWriter, req *http.Request) {
rows, err := db.Query("SELECT * FROM labelTypes")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
labels := make([]*Label, 0)
for rows.Next() {
lb := new(Label)
err := rows.Scan(&lb.Id, &lb.Name)
if err != nil {
log.Fatal(err)
}
labels = append(labels, lb)
}
if err = rows.Err(); err != nil {
log.Fatal(err)
}
tpl.ExecuteTemplate(w, "labels.html", labels)
}
更多关于Golang模板中如何传递多个参数的实战教程也可以访问 https://www.itying.com/category-94-b0.html
5 回复
你能告诉我这个结构体应该是什么样子的吗?
使用结构体,并在其字段中填充数据。
使用匿名结构体。只需声明并填充一次。请记住结构体中的所有字段必须大写,这样它们才能被导出并在模板内部可见。
data := struct {
Labels []Label
Cookie http.Cookie
}{
Labels: labels,
Cookie: c,
}
然后将数据传递给 ExecuteTemplate。在模板中,您可以通过 .Cookie 访问 cookie,通过 .Labels 访问标签。
在Go语言中,向模板传递多个参数有几种常见方法。以下是两种最常用的解决方案:
方法1:使用map[string]interface{}
func createLabels(w http.ResponseWriter, req *http.Request) {
// 获取cookie值
cookie, err := req.Cookie("session")
var cookieValue string
if err == nil {
cookieValue = cookie.Value
}
rows, err := db.Query("SELECT * FROM labelTypes")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
labels := make([]*Label, 0)
for rows.Next() {
lb := new(Label)
err := rows.Scan(&lb.Id, &lb.Name)
if err != nil {
log.Fatal(err)
}
labels = append(labels, lb)
}
if err = rows.Err(); err != nil {
log.Fatal(err)
}
// 创建包含多个参数的数据结构
data := map[string]interface{}{
"Labels": labels,
"Cookie": cookieValue,
}
tpl.ExecuteTemplate(w, "labels.html", data)
}
在模板中这样使用:
<!-- labels.html -->
<div>
<h1>Labels</h1>
<p>Cookie Value: {{.Cookie}}</p>
<ul>
{{range .Labels}}
<li>{{.Id}}: {{.Name}}</li>
{{end}}
</ul>
</div>
方法2:使用自定义结构体
type TemplateData struct {
Labels []*Label
Cookie string
}
func createLabels(w http.ResponseWriter, req *http.Request) {
// 获取cookie值
cookie, err := req.Cookie("session")
var cookieValue string
if err == nil {
cookieValue = cookie.Value
}
rows, err := db.Query("SELECT * FROM labelTypes")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
labels := make([]*Label, 0)
for rows.Next() {
lb := new(Label)
err := rows.Scan(&lb.Id, &lb.Name)
if err != nil {
log.Fatal(err)
}
labels = append(labels, lb)
}
if err = rows.Err(); err != nil {
log.Fatal(err)
}
// 使用结构体传递数据
data := TemplateData{
Labels: labels,
Cookie: cookieValue,
}
tpl.ExecuteTemplate(w, "labels.html", data)
}
模板使用方式与方法1相同。结构体方法在类型安全性和代码可维护性方面更优,特别是当需要传递多个相关参数时。

