执行模板时没有已知格式的结构

Mat*_*att 3 templates json go

我有一个非常通用的应用程序.

客户端通过发送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和模板?

Cer*_*món 5

将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)

在Playground上运行代码.