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.