gpt4 book ai didi

mongodb - Golang MongoDB (mgo) 查找反射报错

转载 作者:IT王子 更新时间:2023-10-29 01:24:43 25 4
gpt4 key购买 nike

用下面的代码

func (s Store) Lookup(department string, number string) (*types.Course, error) {
var result *types.Course
err := s.collection.Find(bson.M{
"department": department,
"course_number": number,
}).One(result)

if err != nil {
switch err {
case mgo.ErrNotFound:
return nil, ErrNotFound
default:
log.Error(err)
return nil, ErrInternal
}
}

return result, nil
}

我遇到了错误:

reflect: reflect.Value.Set using unaddressable value

如果我将第一行从 var result *types.Course 更改为 result := &types.Course{} 则没有错误。这两者到底有什么区别?

最佳答案

这两个选项都声明了一个*types.Course类型的变量。第一个指针值为 nil。第二个初始化为指向 types.Course 类型的值。

 var result *types.Course    // result == nil
result := &types.Course{} // result != nil, points to a value.
result := new(types.Course) // basically the same as the second

mgo 函数需要一个指向值的指针。 nil 指针不指向值。

编写这段代码的典型方式是:

var result types.Course   // declare variable of result type, not a pointer
err := s.collection.Find(bson.M{
"department": department,
"course_number": number,
}).One(&result) // pass address of value to function

关于mongodb - Golang MongoDB (mgo) 查找反射报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33795132/

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