当我尝试访问我传递给模板的函数时,出现了一个错误:
Error: template: struct.tpl:3: function "makeGoName" not defined
请问我做错了什么?
模板文件(struct.tpl):
type {{.data.tableName}} struct {
{{range $key, $value := .data.tableData}}
{{makeGoName $value.colName}} {{$value.colType}} `db:"{{makeDBName $value.dbColName}},json:"{{$value.dbColName}}"`
{{end}}
}
调用文件:
type tplData struct {
tableName string
tableData interface{}
}
func doStuff() {
t, err := template.ParseFiles("templates/struct.tpl")
if err != nil {
errorQuit(err)
}
t = t.Funcs(template.FuncMap{
"makeGoName": makeGoName,
"makeDBName": makeDBName,
})
data := tplData{
tableName: tableName,
tableData: tableInfo,
}
t.Execute(os.Stdout, data)
}
func makeGoName(name string) string {
return name
}
func makeDBName(name string) string {
return name
}
这是一个生成结构体样板代码的程序(如果有人想知道我为什么要在我的模板中这样做)。
ParseFiles
解析之前,您需要添加函数(即调用t.Funcs
)。为此,请通过New()
获取一个新的模板,然后添加您的函数,最后将文件解析到其中。(未经测试) - Volker