我有两个golang HTML模板,具体如下:golang模板加工和仿制药
var m map[string]string
m = make(map[string]string)
m["First"] = `<html>
<body>First template type {{.First}}
</html>`
m["Second"] = `<html>
<body>Second template type {{.SecondF1}} {{.SecondF2}}
</html>`
的第一个HTML模板只有一个参数,一个名为First
而第二模板需要两个参数,命名为SecondF1
和SecondF2
。
现在我有一个结构,它有两个字段,一个用于接收模板名称,另一个用于接收模板参数。
type tmplReceiver struct {
TmplName string
TmplArgs string // Receives JSON string
}
现在,对于上述结构实例的实例可以是:
var i, j tmplReceiver
i.TmplName = "First"
i.TmplArgs = `{"Field1": "First Template Argument"}`
j.TmplName = "Second"
j.TmplArgs = `{
"SecondF1": "Second template First Argument",
"SecondF2": "Second template Second Argument"
}`
现在,我可以通过使用地图,例如获得模板字符串:
tmplStr := m[i.TmplName] (or)
tmplStr := m[j.TmplName]
tmpl, _ = template.New("email").Parse(tmplStr)
然而,我如何获得要为所有可能的模板类型执行的模板,并使用一个tmpl.Execute
语句。换句话说,如果我想有以下代码:
var buff bytes.Buffer
if err := tmpl.Execute(&buff, tmplPtr); err != nil {
log.Fatal(err)
}
log.Println(buff.String())
如何获得tmplPtr
是有效的,无论有多少模板有(First
,Second
等),每个模板可以具有可变数量的参数(First
只有一个精氨酸,而Second
有有两个参数,等等)
我不想写N个不同的tmpl.Execute
报表与if
块为每个模板名称。有没有其他方法可以解决这个问题?谢谢。
但我想这是一个HTTP处理程序,其中的一部分该输入也将来自其他语言。所以我需要一个没有接口或地图的JSON结构。 –
@SankarP我不知道我是否理解你的评论,但在我更新的答案中,你可以处理任何传入的json,不管结构如何,并在你的模板中使用它。唯一的要求是数据包含您想要在模板中使用的字段,但无论如何不能避免。 –