登录
首页 >  Golang >  Go问答

在 golang 模板中向地图添加新的键值

来源:stackoverflow

时间:2024-04-20 20:36:52 398浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天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 -}}
  ...
  

$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" }}

演示的完整工作示例:

https://play.golang.org/p/8bT4jjYwuzg

正如@eugenioy所说,没有内置的方法可以做到这一点,你需要使用一个函数来做到这一点。

幸运的是,有一个广泛使用的常用模板函数库,称为 sprig,它提供了:http://masterminds.github.io/sprig/dicts.html

本篇关于《在 golang 模板中向地图添加新的键值》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>