数据存储区:获取时的实体类型无效
datastore: invalid entity type on get
嘿,我正在尝试通过传递 id 来获取实体,
但我好像得到了一个 nill 指针
我尝试用几种方式初始化实体,但结果是一样的。
我正在尝试尽可能多地创建我的服务器
to-do
我在这里缺少什么?
type UserManager struct {
users []*Users
user *Users
}
func NewUserManager() *UserManager {
return &UserManager{}
}
func (userManager *UserManager) putUser(c appengine.Context, u *Users) (usreRes *Users, err error) {
key, err := datastore.Put(c, datastore.NewIncompleteKey(c, "users", nil), u)
if err != nil {
return nil, err
}
c.Debugf("file key inserted :%#v", key)
return u, nil
}
func (userManager *UserManager) getUserById(userKey string, c appengine.Context) (usreRes *Users, err error) {
entity_id_int, err := strconv.ParseInt(userKey, 10, 64)
if err != nil {
return userManager.user, err
}
k := datastore.NewKey(c, "users", "", entity_id_int, nil)
userRes := new(Users)
err = datastore.Get(c, k, &userRes)
//err = datastore.Get(c, k, &userManager.user)
if err != nil {
return userManager.user, err
}
//return userManager.user,nil
return userRes, nil
}
这是因为 datastore.Get(c, k, "pointer")
需要一个指向结构的指针作为它的第三个参数,而你传递的是一个指针的指针 **userRes
userRes := new(Users)
你正在创建一个指向结构
的指针
所以你应该这样做:
datastore.Get(c, k, userRes)
没有符号,因为使用 new 关键字你已经在创建一个指针
嘿,我正在尝试通过传递 id 来获取实体,
但我好像得到了一个 nill 指针 我尝试用几种方式初始化实体,但结果是一样的。
我正在尝试尽可能多地创建我的服务器 to-do
我在这里缺少什么?
type UserManager struct {
users []*Users
user *Users
}
func NewUserManager() *UserManager {
return &UserManager{}
}
func (userManager *UserManager) putUser(c appengine.Context, u *Users) (usreRes *Users, err error) {
key, err := datastore.Put(c, datastore.NewIncompleteKey(c, "users", nil), u)
if err != nil {
return nil, err
}
c.Debugf("file key inserted :%#v", key)
return u, nil
}
func (userManager *UserManager) getUserById(userKey string, c appengine.Context) (usreRes *Users, err error) {
entity_id_int, err := strconv.ParseInt(userKey, 10, 64)
if err != nil {
return userManager.user, err
}
k := datastore.NewKey(c, "users", "", entity_id_int, nil)
userRes := new(Users)
err = datastore.Get(c, k, &userRes)
//err = datastore.Get(c, k, &userManager.user)
if err != nil {
return userManager.user, err
}
//return userManager.user,nil
return userRes, nil
}
这是因为 datastore.Get(c, k, "pointer")
需要一个指向结构的指针作为它的第三个参数,而你传递的是一个指针的指针 **userRes
userRes := new(Users)
你正在创建一个指向结构
所以你应该这样做:
datastore.Get(c, k, userRes)
没有符号,因为使用 new 关键字你已经在创建一个指针