Golang MongoDB (mgo) 查找反射错误

使用以下代码


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{},则没有错误。这两者之间究竟有什么区别?


叮当猫咪
浏览 129回答 1
1回答

慕娘9325324

这两个选项都声明了一个类型为 的变量*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 secondmgo 函数需要一个指向值的指针。nil 指针不指向值。编写此代码的典型方法是:var result types.Course   // declare variable of result type, not a pointererr := s.collection.Find(bson.M{    "department":    department,    "course_number": number,}).One(&result)           // pass address of value to function
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go