登录
首页 >  Golang >  Go问答

确定映射中是否存在特定键

来源:stackoverflow

时间:2024-02-25 19:03:27 182浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《确定映射中是否存在特定键》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

我在 golang 中有一个类型为: *map[string]interface{} 的地图对象,如何断言它包含某些键?这是我所拥有的:

type respobj struct {
    externalids *map[string]interface{} `json:"externalids,omitempty"`
}
myobj := getrespobj()
out, _ := json.marshal(myobj)
fmt.println("response: ", string(out))
// {"externalids":{"payroll":"bigmoney","serial":"ga3mxx4vv7","vin":"1g1yy3388l5112656"}}
assert.notnil(t, myobj.externalids)
assert.contains(t, &myobj.externalids, "payroll")
assert.contains(t, &myobj.externalids, "serial")
assert.contains(t, &myobj.externalids, "vin")

当前抛出错误:

Error:          "%!s(**map[string]interface {}=0xc0079bf920)" could not be applied builtin len()

正确答案


您应该将地图传递给 assert.Contains()

myobj.externalids 是一个指向地图的指针,因此 &myobj.externalids 将是一个指向地图指针的指针。

取消引用指针,而不是获取其地址:

assert.Contains(t, *myObj.ExternalIds, "payroll")
assert.Contains(t, *myObj.ExternalIds, "serial")
assert.Contains(t, *myObj.ExternalIds, "vin")

请注意 maps are pointers under the hood。很少需要一个指向映射的指针,passing maps have pointer semantics,而且它很高效(仅在引擎盖下传递一个指针)。

理论要掌握,实操不能落!以上关于《确定映射中是否存在特定键》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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