Templates.ExecuteTemplate(w, "index.html", map[string]interface{} {
"Games": games})
}
游戏是[]map[string]interface{}
(sql查询的映射结果)
在模板中:
{{ range $gval := .Games }}
{{ how to make something like: $gval.name.(string) }}
{{end}}
如何将map的interface {}值转换为模板中的string(或int)?在'去'我能做到
games[0]["name"].(string)
当我$gval.name
时,它会写入十六进制字符串
答案 0 :(得分:3)
我认为从模板中输入断言是不可能的。您必须编写自己的函数并从模板中调用它。例如:
func ToString(value interface{}) string {
switch v := value.(type) {
case string:
return v
case int:
return strconv.Itoa(v)
// Add whatever other types you need
default:
return ""
}
}
为了能够从模板调用该函数,您必须在模板上调用Funcs()方法:
tpl.Funcs(template.FuncMap{"tostring": ToString})
现在,您可以在模板中执行{{$gval.name | tostring}}
答案 1 :(得分:2)
我相信不再需要接受的答案。我只能使用 interface{} 值,而无需在 golang 模板中对其进行显式类型转换。我正在使用 v1.16。