为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 bson.M 的这种类型断言是必要的?

为什么 bson.M 的这种类型断言是必要的?

Go
Smart猫小萌 2022-12-19 21:47:11
我有以下代码,使用 go.mongodb.org/mongo-driver 库:updateMap := bson.M{    "$set": bson.M{        "dateAdded": primitive.NewDateTimeFromTime(time.Now()),    },}if len(alias) > 0 {    // I don't see how this type assertion is necessary    updateMap["$set"].(map[string]interface{})["alias"] = alias}如果我做:updateMap["$addFields"].(map[string]map[string]string)["alias"] = alias它不编译。编译器已经知道 updateMap 是 bson.M 类型,它是一个map[string]interface{}. 如何断言它确实在map[string]interface{}做对编译器有用的事情?我以为它会想知道它实际上是什么类型的界面,但显然它不想让我那样做。这里发生了什么?编辑:当然,应该注意的是,这里没有类型断言,它不会编译:无效操作:无法索引 updateMap["$addFields"](接口类型的地图索引表达式{})
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

bson.M被定义为 的别名primitive.M定义type M map[string]interface{}(即非别名类型)。问题在于它updateMap["$set"]是一个bson.M,与 相比是一种不同的类型map[string]interface{}。因此,您的类型断言必须改为 to bson.M,例如:

updateMap["$set"].(bson.M)["alias"] = alias

Go 游乐场中的可运行示例。


查看完整回答
反对 回复 2022-12-19
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号