web-dev-qa-db-fra.com

reflect.Value.Set utilisant une valeur non adressable

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

c'est le code permettant d'obtenir et d'afficher les utilisateurs de la table à l'aide de slice résultant de l'erreur suivante de gorm 

reflect.Value.Set utilisant une valeur non adressable

4
Krishna Satya

Vous devez appeler Find avec un pointeur sur la tranche.

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

documentation Gorm pertinente: http://jinzhu.me/gorm/crud.html#query

12
S. Diego

Juste pour clarifier les réponses de S.Diego, cela change:

err := db.Find(users).Error

pour ça:

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

l'erreur dit, la variable utilisateurs n'est pas adressable, car ce n'est pas un pointeur.

2
Felipe Valdes

De manière très similaire à la réponse acceptée (mais dans un contexte légèrement différent), et à une erreur que je continue à commettre dans différents projets:

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

devient

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

Remarquez les esperluettes.

1
Rambatino