使用 gorm Find() 检索多行时出现致命错误
Fatal error when retrieving multiple rows with gorm Find()
我被一个明显的操作困住了:使用 gorm.Find() 方法检索多行。
(resolver.go)
package resolver
type Root struct {
DB *gorm.DB
}
func (r *Root) Users(ctx context.Context) (*[]*UserResolver, error) {
var userRxs []*UserResolver
var users []model.User
// debug-start
// This is to prove r.DB is allocated and working
// It will print {2 alice@mail.com} in the console
var user model.User
r.DB.Find(&user)
log.Println(user)
// debug-end
if err := r.DB.Find(&users); err != nil { // <-- not working
log.Fatal(err)
}
for _, user := range users {
userRxs = append(userRxs, &UserResolver{user})
log.Println(user)
}
return &userRxs, nil
}
(model.go)
package model
type User struct {
ID graphql.ID `gorm:"primary_key"`
Email string `gorm:"unique;not null"`
}
mysql table 填充了2个值。以下是 json 样式的内容:
{
{ Email: bob@mail.com },
{ Email: alice@mail.com },
}
这是我运行程序的结果:
2020/05/13 12:23:17 Listening for requests on :8000
2020/05/13 12:23:22 {2 alice@mail.com}
2020/05/13 12:23:22 &{{{0 0} 0 0 0 0} 0xc0004cee40 <nil> 2 0xc00031e3c0 false 0 {0xc00035bea0} 0xc0004b3080 {{0 0} {<nil>} map[] 0} 0xc000408340 <nil> 0xc0004cee60 false <nil>}
我的代码有什么问题?从所有 tuto/so/etc.. 来源看来,我正在正确定义切片变量并将其传递给 Find() 函数..
您需要使用一片指针:
users := make([]*model.User, 0, 2)
if err := r.DB.Find(&users).Error; err != nil {
log.Fatal(err)
}
if err := r.DB.Find(&users); err != nil { // <-- not working
log.Fatal(err)
}
可能您忘记提及错误 属性 并且在这种情况下返回的对象肯定不是 nil(请提及 Find returns 在这种情况下不是错误接口)
请尝试类似的东西
if err := r.DB.Find(&users).Error; err != nil {
log.Fatal(err)
}
希望对你有帮助
我被一个明显的操作困住了:使用 gorm.Find() 方法检索多行。
(resolver.go)
package resolver
type Root struct {
DB *gorm.DB
}
func (r *Root) Users(ctx context.Context) (*[]*UserResolver, error) {
var userRxs []*UserResolver
var users []model.User
// debug-start
// This is to prove r.DB is allocated and working
// It will print {2 alice@mail.com} in the console
var user model.User
r.DB.Find(&user)
log.Println(user)
// debug-end
if err := r.DB.Find(&users); err != nil { // <-- not working
log.Fatal(err)
}
for _, user := range users {
userRxs = append(userRxs, &UserResolver{user})
log.Println(user)
}
return &userRxs, nil
}
(model.go)
package model
type User struct {
ID graphql.ID `gorm:"primary_key"`
Email string `gorm:"unique;not null"`
}
mysql table 填充了2个值。以下是 json 样式的内容:
{
{ Email: bob@mail.com },
{ Email: alice@mail.com },
}
这是我运行程序的结果:
2020/05/13 12:23:17 Listening for requests on :8000
2020/05/13 12:23:22 {2 alice@mail.com}
2020/05/13 12:23:22 &{{{0 0} 0 0 0 0} 0xc0004cee40 <nil> 2 0xc00031e3c0 false 0 {0xc00035bea0} 0xc0004b3080 {{0 0} {<nil>} map[] 0} 0xc000408340 <nil> 0xc0004cee60 false <nil>}
我的代码有什么问题?从所有 tuto/so/etc.. 来源看来,我正在正确定义切片变量并将其传递给 Find() 函数..
您需要使用一片指针:
users := make([]*model.User, 0, 2)
if err := r.DB.Find(&users).Error; err != nil {
log.Fatal(err)
}
if err := r.DB.Find(&users); err != nil { // <-- not working
log.Fatal(err)
}
可能您忘记提及错误 属性 并且在这种情况下返回的对象肯定不是 nil(请提及 Find returns 在这种情况下不是错误接口)
请尝试类似的东西
if err := r.DB.Find(&users).Error; err != nil {
log.Fatal(err)
}
希望对你有帮助