使用 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 表中填充了 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.. 来源看来,我正确地定义了一个 slice var 并将其传递给 Find() 函数。


PIPIONE
浏览 96回答 2
2回答

哈士奇WWW

您需要使用一片指针:users := make([]*model.User, 0, 2)if err := r.DB.Find(&users).Error; err != nil {&nbsp; &nbsp; log.Fatal(err)}

一只斗牛犬

if err := r.DB.Find(&users); err != nil { // <-- not working&nbsp; &nbsp; log.Fatal(err)}可能你忘了提到 Error 属性并且在这种情况下返回的对象肯定不是 nil (请提到 Find 在这种情况下返回不是错误接口)请尝试类似的东西if err := r.DB.Find(&users).Error; err != nil {&nbsp; &nbsp; log.Fatal(err)}希望能帮助到你
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go