当前位置: > > > > 在 golang 模板中向地图添加新的键值
在 golang 模板中向地图添加新的键值
来源:stackoverflow
2024-04-20 20:36:52
0浏览
收藏
在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天米云就整理分享《在 golang 模板中向地图添加新的键值》,聊聊,希望可以帮助到正在努力赚钱的你。
问题内容
$ hugo version
Hugo Static Site Generator v0.54.0 darwin/amd64 BuildDate: unknown
$ cat layouts/t/code.html
...
{{- $json := getJSON $path -}}
{{- if eq $action "edit" -}}
{{- $json.nestedMap["action"] = "update" -}}
{{- end -}}
...
<script type="module">
import App from "/code.js";
new App({{ $json.nestedMap | jsonify }});
</script>
$json.nestedmap 是map[string]interface {}
但出现错误解析失败错误字符 u+005b ‘[’
感谢您的任何提示。
解决方案
您收到的错误是因为 [ 字符是意外的。
事实上,这种语法在模板中不起作用:
$json.nestedmap["action"]
您必须使用如下所示的 index 函数来访问地图元素:
index $json.nestedmap "action"
但是,据我所知,该语法不允许您实际设置密钥,而只能访问它。
修改模板内的映射的一种方法是在包装器结构中定义某些方法,然后从模板中调用该方法。
例如:
type mapwrapper struct {
themap map[string]interface{}
}
func (m *mapwrapper) setmapvalue(key, value string) string {
m.themap[key] = value
return ""
}
然后在模板中:
{{- .SetMapValue "key2" "value2" }}
演示的完整工作示例:
正如@eugenioy所说,没有内置的方法可以做到这一点,你需要使用一个函数来做到这一点。
幸运的是,有一个广泛使用的常用模板函数库,称为 sprig,它提供了:
本篇关于《在 golang 模板中向地图添加新的键值》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注米云公众号!
