登录
首页 >  Golang >  Go问答

如何将 Primitive.m 断言为映射字符串

来源:stackoverflow

时间:2024-04-09 23:18:32 280浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《如何将 Primitive.m 断言为映射字符串》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我正在我的 go 应用程序中使用 mongodb,并提取一些数据并将其存储在 bson.m 中(其中。这是一个从数据库获取 bson.m 对象然后打印它的示例)(让我们将此对象称为 data):

[map[_id:objectid("xxxxxxx") address:xx decimal:18 providers:map[currency:value] symbol:link]

这对我来说看起来是正确的。

我想循环遍历 providers 字段中的地图(如您所见,那里也是一张地图)。我尝试过几次,但每次都被阻止。

由于我在此处的文档中阅读的内容以及我所做的测试,看起来 bson.m 和 primitive.m 是相同的,并且它们各自被视为 map[string]interface{ }

当我尝试将其断言到 map[string]string 时,我出现了恐慌错误:

// code run
data["providers"].(map[string]string)

//error received
panic: interface conversion: interface {} is primitive.m, not map[string]string

这样做的原因是我想循环遍历 providers 字段,当我尝试按原样循环时,出现此错误:

// code to run
for key, provider := range data["providers"] {...}

// error received
cannot range over data["providers"] (map index expression of type interface{})

我读到我可能需要对编组和解码进行一些操作,但我觉得我只是错过了一个步骤来说明为什么我需要这样做,或者它们将如何提供帮助。

无论如何总结一下:

  1. 如何在 primitive.m/bson.m/map[string]interface{} 上循环?

  2. 如何将primitive.m/bson.m/map[string]interface{}转换为map[string]string?

看起来我可能正在尝试做与此条目相反的事情,并且看起来此条目给了我冲突的信息。希望随着我更多地了解我真正的问题是什么而编辑问题。谢谢!


解决方案


与 burak serdar 的交谈帮助我们找到了答案!您必须将 data["providers"] 断言为 primitive.m

for key, provider := range data["providers"].(primitive.m){...}

需要注意的关键事项:primitive.m 的处理方式类似于 map[string]interface{}

正如burak serdar提到的,我无法将primitive.m的这个实例断言为map[string]string,因为map[string]interface{}中的interface的类型是primitive.m。因此,我必须将 providers 对象断言为 primitive.m 对象,然后我可以正常循环它。

我无法将基元.m 转换为 map[string]string

map[string]interface{}map[string]string 的类型断言将会失败,因为它是一种类型断言,而不是转换类型。它只检查接口类型是否是您认为的类型,在本例中,它不是。您必须迭代 map[string]interface{},并输入断言值:

for k,v:=range data.(primitive.M)["providers"] {
   if str, ok:=v.(string); ok {
      // Use k and str
   }
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

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