登录
首页 >  Golang >  Go问答

使用 gorm Find() 检索多行时发生致命错误

来源:stackoverflow

时间:2024-04-12 22:21:34 315浏览 收藏

今天golang学习网给大家带来了《使用 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 [email protected]} 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 表填充了 2 个值。以下是json样式的内容:

{
  { email: [email protected] },
  { email: [email protected] },
}

这是我运行程序时的结果:

2020/05/13 12:23:17 Listening for requests on :8000
2020/05/13 12:23:22 {2 [email protected]}
2020/05/13 12:23:22 &{{{0 0} 0 0 0 0} 0xc0004cee40  2 0xc00031e3c0 false 0 {0xc00035bea0} 0xc0004b3080 {{0 0} {} map[] 0} 0xc000408340  0xc0004cee60 false }

我的代码有什么问题吗?从所有 tuto/so/etc.. 的来源看来,我正确地定义了一个切片 var 并将其传递给 find() 函数..


解决方案


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)
}

希望它有所帮助

您需要使用一些指针

users := make([]*model.User, 0, 2)
if err := r.DB.Find(&users).Error; err != nil {
    log.Fatal(err)
}

以上就是《使用 gorm Find() 检索多行时发生致命错误》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>