使用 mongo-driver 时,我有这个结构,我将其作为 interface{} 传递给 get 函数。问题是当我使用 Decode 方法时,它返回一个映射,而我期待一个正确类型的结构。type Item struct { //whatever}type mymodel struct { I interface{} F interface{} DatabaseName string Collection string}func Do(){ var item Item var filter Item m:= mymodel{I: item, F: filter} res,_ := get(m)}func get(m mymodel) (*interface{}, error) { c := database.DBCon.Database("whatever").Collection("whatever") ctx, _ := context.WithTimeout(context.Background(), 5*time.Second) err := c.FindOne(ctx, m.F).Decode(&m.I) if err != nil { log.Log.Info(err) return nil, err } return &m.I, nil}去
1 回答
慕少森
TA贡献2019条经验 获得超9个赞
您需要创建接口字段I并F存储一个指向要将数据解码到的实例的指针(可能不是,F因为您没有将任何内容解码到其中),然后将它们直接传递给Decode,而不需要任何更多的地址操作(&x) 。
例如:
func Do(){
var item Item
var filter Item
m:= mymodel{I: &item, F: filter}
res,_ := get(m)
}
func get(m mymodel) (*interface{}, error) {
c := database.DBCon.Database("whatever").Collection("whatever")
ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
err := c.FindOne(ctx, m.F).Decode(m.I)
if err != nil {
log.Log.Info(err)
return nil, err
}
return &m.I, nil
}
- 1 回答
- 0 关注
- 99 浏览
添加回答
举报
0/150
提交
取消