转换界面{}以输入模板

时间:2016-07-19 11:50:55

标签: go go-templates

  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时,它会写入十六进制字符串

2 个答案:

答案 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。