go - 使用 gorm Find() 检索多行时出现 fatal error

标签 go graphql go-gorm

我坚持一个明显的操作:使用 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() 函数。

最佳答案

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

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

请尝试类似的东西
if err := r.DB.Find(&users).Error; err != nil {
    log.Fatal(err)
}

希望能帮助到你

关于go - 使用 gorm Find() 检索多行时出现 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61772382/

相关文章:

Go - 如何增加最大 Stdin 输入长度?

canvas - 如何创建 svg 并将其导出为 png/jpeg

graphql - 如何在datahub graphql中过滤?

database - PREPARE 语句在几次调用后决定不使用索引,即使它更慢

arrays - 删除 slice 中的元素

django - 获取查询以返回值列表,而不是graphene-django中的对象

javascript - 使用 Apollo 客户端时,GraphQL 突变未发送到请求?

go - 将 gorm 日志存储在文件中

postgresql - 如何在 Docker 容器之间建立连接

go - 使用统一建模语言图编程 Go