Как поместить данные из бд 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
}
  1. Так как данные нужны по одному конкретному пользователю, то нужно знать какой то ID уникальный для этого пользователя. В качестве примера такого ID я использую "username" который передаётся в функцию в качестве параметра.
  2. В функцию row.Scan нужно передавать не переменную, а указатель на неё. Для этого нужно поставить символ & перед названием переменой.
→ Ссылка