Cast interface{} 以输入模板
Cast interface{} to type in template
Templates.ExecuteTemplate(w, "index.html", map[string]interface{} {
"Games": games})
}
games 在哪里 []map[string]interface{}
(sql 查询的映射结果)
在模板中:
{{ range $gval := .Games }}
{{ how to make something like: $gval.name.(string) }}
{{end}}
如何在模板中将 map 的 interface{} 值转换为字符串(或整数)?在 'go' 我能做到
games[0]["name"].(string)
当我执行 $gval.name
时,它会写入十六进制字符串
我认为不可能从模板进行类型断言。您必须编写自己的函数并从模板中调用它。例如:
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}}
我认为已接受的答案不再是必需的。我只是能够使用 interface{} 值而无需在 golang 模板中明确地对其进行类型转换。我在路上 v1.16.
Templates.ExecuteTemplate(w, "index.html", map[string]interface{} {
"Games": games})
}
games 在哪里 []map[string]interface{}
(sql 查询的映射结果)
在模板中:
{{ range $gval := .Games }}
{{ how to make something like: $gval.name.(string) }}
{{end}}
如何在模板中将 map 的 interface{} 值转换为字符串(或整数)?在 'go' 我能做到
games[0]["name"].(string)
当我执行 $gval.name
时,它会写入十六进制字符串
我认为不可能从模板进行类型断言。您必须编写自己的函数并从模板中调用它。例如:
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}}
我认为已接受的答案不再是必需的。我只是能够使用 interface{} 值而无需在 golang 模板中明确地对其进行类型转换。我在路上 v1.16.