go - 在模板中使用函数而不是方法
问题描述
我使用以下代码
var data struct {
File FZR
API API
}
const tmpl = `
{{- range .File.Modules}}
# in context of {{.Name}}
echo {{.EchoText}}
{{end}}`
func EchoText(m mts) string {
return m.Type
}
像这样它不起作用,现在我将其更改为
func (m mts) EchoText() string {
return m.Type
}
它会工作,但我想让它与第一个选项一起工作,我该怎么做?我的意思是更新模板...
更新:作为批准答案https://golang.org/pkg/text/template/#example_Template_func
但只有字符串,我该如何注册EchoText
解决方案
正如@mkopriva 在他的第一条评论中建议的那样,您只需将所有函数引用到template.FuncMap
您建立从名称到函数的映射的位置
然后进入模板,您只需调用它们并传递mts
as 参数即可。
package main
import (
"log"
"os"
"text/template"
)
type mts struct {
Type1 string
Type2 string
}
func main() {
funcMap := template.FuncMap{
"myFunc1": EchoType1,
"myFunc2": EchoType2,
}
const templateText = `
Input: {{printf "%q" .}}
Output1:{{myFunc1 .}}
Output2:{{myFunc2 .}}
`
tmpl, err := template.New("myFuncTest").Funcs(funcMap).Parse(templateText)
if err != nil {
log.Fatalf("parsing: %s", err)
}
myMts := mts{Type1: "myType1", Type2: "myType2"}
err = tmpl.Execute(os.Stdout, myMts)
if err != nil {
log.Fatalf("execution: %s", err)
}
}
func EchoType1(m mts) string {
return m.Type1
}
func EchoType2(m mts) string {
return m.Type2
}
这将产生以下输出:
输入:{“myType1”“myType2”}
输出1:我的Type1
输出2:我的Type2
推荐阅读
- apache - 以下警告即将进行水槽升级。为什么会出现以及如何删除它?
- mongodb - 如何使用 helm bitnami/mongodb 和 kube-prometheus-stack 设置 mongodb grafana 仪表板
- python - 我无法将字符串类型中的 ' , ' 替换为 ' ' 以将其转换为整数
- java - java获取elasticsearch中某个字段的所有值
- firebase - Flutter / Firebase 延迟推送通知
- spring-boot - 为什么 TestContainer 使用错误的 URL(缺少 'tc')?
- c# - WPF ItemTemplateSelector 从不加载到 UI
- python - 游戏:制造多个障碍物飞向你的船
- java - 如何从firebase中的节点检索值并显示在回收器视图中?
- amazon-web-services - 在 EC2 实例上监控 ML 模型的性能