Получить выбранное значение из запроса Golang Gorm

Я хочу получить данные пользователя после того, как сделаю запрос с помощью gorm

item := []models.User{}

if config.DB.First(&item, "email = ?", email).RecordNotFound() || len(item) == 0 {
    c.JSON(500, gin.H{
        "status":  "error",
        "message": "record not found"})
    c.Abort()
    return
}

c.JSON(200, gin.H{
    "status": "success",
    "data":   item,
})

А вот и мои модели

type User struct {
gorm.Model
Stores     []Store // to show that customer can have many stores
UserName   string
FullName   string
Email      string `gorm:"unique_index"`
Password   string
SocialID   string
Provider   string
Avatar     string
Role       bool `gorm:"default:0"`
HaveStore  bool `gorm:"default:0"`
isActivate bool `gorm:"default:0"`
}

Я просто хочу получить UserName после запроса от gorm, как это получить? Я использую item.Username, но ошибка показывает, что item.UserName undefined (type []models.User has no field or method UserName)


person arthas    schedule 26.04.2020    source источник
comment
Вы должны изменить код ответа с 500 на 404 для ошибки «запись не найдена».   -  person Anton    schedule 26.04.2020


Ответы (2)


[] обозначает срез, что означает, что item не отдельный пользователь, а часть пользователей, а срезы не имеют полей, у них есть элементы, которые являются отдельными экземплярами, хранящимися в них, для доступа к этим элементам вы используете выражение индекса (s[i]). Либо сделайте item[0].UserName, либо объявите item как одного пользователя, а не как фрагмент. т.е. item := model.User{}, тогда вы можете использовать выражение выбора item.UserName.

person mkopriva    schedule 26.04.2020

Вы пытаетесь получить UserName от части пользователя, у которой возникла проблема. Если электронная почта является уникальной полевой базой данных, вы можете использовать модель пользователя, а не только часть пользователя.

item := models.User{}
config.DB.First(&item, "email = ?", email)

Затем вы можете получить доступ, например, имя пользователя, например item.UserName

person Eklavya    schedule 26.04.2020
comment
да, я просто понимаю это, я использую срез, а мне просто нужен ряд. Спасибо - person arthas; 26.04.2020