gpt4 book ai didi

go - 当作为 interface{} 返回 map 传递时解码为 struct

转载 作者:行者123 更新时间:2023-12-01 22:17:51 26 4
gpt4 key购买 nike

使用 mongo-driver 时,我有这个结构,我将它作为 interface{} 传递给 get 函数。问题是当我使用 Decode 方法时,它返回一个映射,而我期待一个正确类型的结构。我发现了一个类似的问题
here但解决方案对我不起作用,程序崩溃了。

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

}

最佳答案

您需要制作界面字段IF存储一个指向要解码数据的实例的指针(可能不是 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
}

关于go - 当作为 interface{} 返回 map 传递时解码为 struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58157708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com