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

问题描述 投票:0回答:1

我陷入了一个显而易见的操作:使用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 <nil> 2 0xc00031e3c0 false 0 {0xc00035bea0} 0xc0004b3080 {{0 0} {<nil>} map[] 0} 0xc000408340 <nil> 0xc0004cee60 false <nil>}

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

我陷入了一个显而易见的操作:使用gorm.Find()方法检索多行。 (resolver.go)包解析器类型Root struct {DB * gorm.DB} func(r * Root)Users(ctx context.Context)...

go graphql gorm
1个回答
0
投票

您需要使用pointers

© www.soinside.com 2019 - 2024. All rights reserved.