Как поместить данные из бд SQLlite в структуру в Golang
Не получается поместить данные из БД в структуру.Как это реализовать?
Выводит ошибку:
2022/12/02 18:52:37 GetUserInfo error2: sql: converting argument $1 type: unsupported type models.Auth, a struct
sql: converting argument $1 type: unsupported type models.Auth, a struct
Код для быстрого редактирования:
func (a *AuthStorage) GetUserInfo(user models.Auth) (models.Auth, error) {
statement, err := a.db.Prepare("SELECT * FROM users")
if err != nil {
log.Printf("GetUserInfo error1: %v\n", err)
return models.Auth{}, err
}
err = statement.QueryRow(user).Scan(user.Username, user.Email, user.Password, user.Token, user.ExpireTime)
if err != nil {
log.Printf("GetUserInfo error2: %v\n", err)
return models.Auth{}, err
}
return user, nil
}
Ответы (1 шт):
Автор решения: lcomrade
→ Ссылка
Я бы сделал так:
func (a *AuthStorage) GetUserInfo(username string) (models.Auth, error) {
// Сделать запрос
row := a.db.QueryRow(
`SELECT username, email, password, token, expire_time FROM users WHERE username = $1`,
username,
)
// Прочитать результат
err = row.Scan(&user.Username, &user.Email, &user.Password, &user.Token, &user.ExpireTime)
if err != nil {
return models.Auth{}, err
}
return user, nil
}
- Так как данные нужны по одному конкретному пользователю, то нужно знать какой то ID уникальный для этого пользователя. В качестве примера такого ID я использую "username" который передаётся в функцию в качестве параметра.
- В функцию row.Scan нужно передавать не переменную, а указатель на неё. Для этого нужно поставить символ & перед названием переменой.
