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

Golang MongoDB (mgo) 查找反射错误

Golang MongoDB (mgo) 查找反射错误

Go
叮当猫咪 2021-11-22 18:15:53
使用以下代码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{},则没有错误。这两者之间究竟有什么区别?
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

这两个选项都声明了一个类型为 的变量*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


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信