Go reflect.Value.Set使用不可寻址的值

Go reflect.Value.Set使用不可寻址的值,go,go-gorm,Go,Go Gorm,这是使用slice从表中获取和显示用户的代码,slice是gorm产生的以下错误 reflect.Value.Set使用不可寻址的值 必须使用指向切片的指针调用Find g.GET("/", func(c echo.Context) error { var users []models.User err := db.Find(users).Error if err != nil { fmt.Println(err) } return c.J

这是使用slice从表中获取和显示用户的代码,slice是gorm产生的以下错误

reflect.Value.Set使用不可寻址的值


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

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

相关Gorm文件:

仅对S.Diego的答案进行澄清,更改如下:

err := db.Find(&users).Error
为此:

err := db.Find(users).Error

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

与公认的答案非常相似(但上下文略有不同),我在不同的项目中不断犯下错误:

err := db.Find(&users).Error
变成

func migrate(db *gorm.DB) {
    db.AutoMigrate(User{}, Activity{})
}

注意符号。

然后我得到了一个零引用错误,我通过在前面包含driverand create users slice来解决它:users=make([]models.User,0)这比go gorm更通用
go-yaml
Unmarshal
在传递未正确使用符号的内容时也会遇到同样的问题。(不是技术术语,而是实际情况)
func migrate(db *gorm.DB) {
    db.AutoMigrate(&User{}, &Activity{})
}