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

使用 gorm Find() 检索多行时出现致命错误

使用 gorm Find() 检索多行时出现致命错误

Go
PIPIONE 2022-06-01 18:04:18
我坚持一个明显的操作:使用 gorm.Find() 方法检索多行。(resolver.go)package resolvertype 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 modeltype User struct {    ID    graphql.ID `gorm:"primary_key"`    Email string     `gorm:"unique;not null"`}mysql 表中填充了 2 个值。这是json样式的内容:{  { Email: bob@mail.com },  { Email: alice@mail.com },}这是我运行程序时的结果:2020/05/13 12:23:17 Listening for requests on :80002020/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.. 来源看来,我正确地定义了一个 slice var 并将其传递给 Find() 函数。
查看完整描述

2 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您需要使用一片指针:


users := make([]*model.User, 0, 2)

if err := r.DB.Find(&users).Error; err != nil {

    log.Fatal(err)

}


查看完整回答
反对 回复 2022-06-01
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

if err := r.DB.Find(&users); err != nil { // <-- not working

    log.Fatal(err)

}

可能你忘了提到 Error 属性并且在这种情况下返回的对象肯定不是 nil (请提到 Find 在这种情况下返回不是错误接口)


请尝试类似的东西


if err := r.DB.Find(&users).Error; err != nil {

    log.Fatal(err)

}

希望能帮助到你


查看完整回答
反对 回复 2022-06-01
  • 2 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

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