golang interface{}类型转换 bson.M 遇到莫名其妙的问题

背景

从mongo数据库中取出数据以interface{}格式返回,解析返回的数据。
1.从mongo中取数据

newSession := m.Session.Copy()
defer newSession.Close()
c := newSession.DB(database).C(collName)
if err := c.Find(bson.M{"time": occurtime}).One(&data); err != nil {
		Error(err)
}

2.mongo返回数据后 对interface数据进行解析
在这里插入图片描述


问题

问题就是出现在解析的时候报了错
在这里插入图片描述
特地debug了一下queryresult的类型 发现的确是bson.M 然后他就是报错

尝试了各种方法,打了无数debug,并没发现问题。


解决

最后还是在同事帮助下。。去掉了这里的断言看看问题
在这里插入图片描述

看到了panic后的问题显示
在这里插入图片描述
第一眼看的一头雾水。。 bson.M not bson.M

最后想到,这是在两个文件下的代码 然而
在这里插入图片描述
在这里插入图片描述
一个引用了服务本地的mgo包 另一个则使用了gopath内的包
所以判断成了两个不一样的类型 真的是尴尬0.0


教训总结

同一个服务用到的相同包一定要调同一个地方的!!!
同一个服务用到的相同包一定要调同一个地方的!!!
同一个服务用到的相同包一定要调同一个地方的!!!

猜你喜欢

转载自blog.csdn.net/zkt286468541/article/details/82872107