当前位置: > > > > 在 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的相关知识,请关注公众号!