web-dev-qa-db-ja.com

アドレス指定不可能な値を使用してreflect.Value.Set

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からのエラーが発生します

アドレス指定不可能な値を使用してreflect.Value.Set

10
Krishna Satya

スライスへのポインタでFindを呼び出す必要があります。

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

関連するGormのドキュメント: http://jinzhu.me/gorm/crud.html#query

19
S. Diego

S.Diegoの回答を明確にするために、これを変更します。

err := db.Find(users).Error

これに:

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

エラーによると、変数usersはポインタではないため、アドレス指定できません。

7
Felipe Valdes

受け入れられた回答と非常に似た方法で(ただし、若干異なるコンテキストで)、さまざまなプロジェクトで繰り返し発生するエラー:

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

なる

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

アンパサンドに注意してください。

4
Rambatino