使用以下代码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
- 1 回答
- 0 关注
- 128 浏览
添加回答
举报
0/150
提交
取消