当我尝试使用Funcs
和时,它注意到Go模板很奇怪FuncMap
。以下代码按预期工作:
buffer := bytes.NewBufferString("")
funcMap := template.FuncMap{
"label": strings.Title,
}
t, _ := template.New("alex").Funcs(funcMap).Parse("{{label \"alex\"}}")
t.Execute(buffer, "")
return string(buffer.Bytes()) //=> "Alex"
但是,当我尝试将模板放在文件中时,它不起作用(Execute()
说:)"alex" is an incomplete or empty template
:
t, _ := template.New("alex").Funcs(funcMap).ParseFiles("template.html")
使用template.html:
{{label \"alex\"}}
知道为什么吗?这是一个错误吗?有没有更简单的方法在模板中使用方法/功能?
ParseFiles可能会使用更好的文档。一个模板对象可以包含多个模板,每个模板都有一个名称。如果查看ParseFiles的实现,则会看到它使用 文件名
作为模板对象内部的模板名称。因此,将文件的名称与模板对象的名称相同(可能通常不实用),或者使用ExecuteTemplate而不是Execute。
问题内容: 在(和)包中,具有以下签名: 到底是干什么用的?我已经扫描了文档(还有一些资料),但无济于事。我只是用一个空字符串实例化所有模板,这似乎没有什么不同。我为什么要打扰一个名字? 即使是命名模板,两者似乎是等效的: https://play.golang.org/p/wKzCHdLf2S 问题答案: 毫无疑问,模板的名称就是为模板 命名 。 到底有什么好处呢?只要您不想 引用 该模板,就没
问题内容: 在我去的代码,我经常用这样的 Go模板中的等效代码将是 不幸的是在模板代码失败,如果是:/ 在go模板中是否可以实现相同的目的? 问题答案: 模板功能不像Go 操作符那样进行短路评估。 在调用函数之前先评估函数的参数。即使为nil ,也总是对表达式求值。 解决方法是使用嵌套: 您可以避免嵌套或使用模板函数: 游乐场的例子
"Pay attention to what you hear; the measure you give will be the measure you get, and still more will be given you. For to those who have, more will be given; and from those who have nothing, even wh
我希望输出日志消息的方式与使用bash“logger”命令的方式完全相同,但在Java中使用Log4j: 在尝试了许多不同的模式后,我无法再现相同的输出。知道怎么写这个图案吗? 谢谢你,
问题内容: 我知道在模板中我可以调用以表达式命名的函数,例如。但是如何为表达式命名函数呢? 问题答案: 您总是可以定义这样的功能:
问题内容: 我有定义功能的Go程序。我也有一个地图,每个功能都应该有一个键。我怎样才能做到这一点? 我已经尝试过了,但这是行不通的。 问题答案: 您是否正在尝试做这样的事情?我已经修改了示例,以使用各种类型和数量的函数参数。