我有一个非常通用的应用程序.
客户端通过发送json编码的消息与之交谈,消息可能包含应用程序无需知道的任何数量的字段.
该应用程序加载配置文件并包含一些模板字段.
例如:
template = "Value read from json: {{.FilePath}}"
Run Code Online (Sandbox Code Playgroud)
和
json from client = { "FilePath": "/tmp/filename.abc", "OtherField1":"value1" }
Run Code Online (Sandbox Code Playgroud)
等等
当使用普通的golang模板时,首先需要定义一个结构,以便将json解组为.然后使用来自结构的值创建和执行模板.
这是一个问题,我不想将一个结构硬编码,它将FilePath作为一个字符串包含在一个用户可能认为有用的任何其他字段中.它使它不通用.
我该如何解决这个问题?或者是否有另一种方法可以在不使用golang模板的情况下组合json和模板?
将JSON解组为interface{}值并将该值传递给模板Execute方法.问题中的模板与问题中的JSON一样工作.
t := template.Must(template.New("").Parse(tmpl))
var v interface{}
if err := json.Unmarshal(jsonFromClient, &v); err != nil {
// handle error
}
if err := t.Execute(output, v); err != nil {
// handle error
}
Run Code Online (Sandbox Code Playgroud)