【发布时间】:2021-04-28 08:19:25
【问题描述】:
我可以在 go 中使用动态属性制作 html 模板吗?
像这样的例子目前会导致错误
无效模板:模板:sticker.CellRepresentation:1:23:在 <.sticker_set.url> 处执行“sticker.CellRepresentation”:无法在类型接口 {}
中评估字段 url
func sample() error {
tpl, err := template.New("sample").Parse(`<a href="${sticker_set.url}">{{.sticker_set.url}}</a>`)
if err != nil {
return err
}
data := map[string]interface{}{
"sticker_set": map[string]interface{}{
"url": "x",
},
}
if err := tpl.Execute(NoopWriter{}, data); err != nil {
return fmt.Errorf("Invalid template: %w", err)
}
return nil
}
func main() {
err := sample()
if err != nil {
panic(err)
}
}
我没有使用结构,因为我尝试执行的模板使用的是在编译时未定义的结构的 json
【问题讨论】:
-
问题中的代码不会产生引用的错误:play.golang.org/p/xWbjObZCF9h。请分享您遇到问题的实际代码。
-
@mkopriva 哦,真的,我的错。我发布的代码是一个简单的版本,但它是我实际执行的那个,除了我将原始代码保留在 main 之后并想在它之前插入一个
return以快速分析什么问题是。没有注意到这段代码实际上是有效的,而后面的原始代码导致了原因,因为模板是相同的 -
如果您仍然无法解决问题,请随时使用重现错误的代码示例更新问题。
-
我进行了快速搜索,如果您尝试访问
nil的内容,则会显示该错误。 -
@TehSphinX 类似的东西实际上是问题所在,尽管在我的情况下它不是
nil而是一个空字符串
标签: go go-templates go-html-template