reflect.Value.Set使用无法寻址的值

Kri*_*tya 8 go go-gorm

g.GET("/", func(c echo.Context) error {
    var users []models.User
    err := db.Find(users).Error
    if err != nil {
        fmt.Println(err)
    }
    return c.JSON(http.StatusOK, users)
})
Run Code Online (Sandbox Code Playgroud)

这是使用切片从表中获取和显示用户的代码,导致gorm出现以下错误

reflect.Value.Set使用无法寻址的值

小智 17

您必须使用指向切片的指针调用Find.

err := db.Find(&users).Error
Run Code Online (Sandbox Code Playgroud)

相关的Gorm文档:http://jinzhu.me/gorm/crud.html#query


Fel*_*des 6

只是为了澄清S.Diego的答案,更改了以下内容:

err := db.Find(users).Error
Run Code Online (Sandbox Code Playgroud)

对此:

err := db.Find(&users).Error
Run Code Online (Sandbox Code Playgroud)

错误提示,变量用户不可寻址,因为它不是指针。


Ram*_*ino 6

以与接受的答案非常相似的方式(但在略有不同的上下文中),以及我在不同项目中不断犯的错误:

func migrate(db *gorm.DB) {
    db.AutoMigrate(User{}, Activity{})
}
Run Code Online (Sandbox Code Playgroud)

变成

func migrate(db *gorm.DB) {
    db.AutoMigrate(&User{}, &Activity{})
}
Run Code Online (Sandbox Code Playgroud)

注意符号。