Как преобразовать тип *sql.Rows в int? Golang(Go)

Рейтинг: 0Ответов: 1Опубликовано: 12.04.2023

Моя цель - создать проверку регистрации. Не занято ли имя, email и тд. Так как я новичок я решил сделать это простым способом. Узнать max id и начать уменьшать этот id каждый раз проверяя не совпадают ли значения. Я узнал максимальный id при помощи команды:

Select max(`id`) from `users`

Но теперь, переменная в которую я записал это значение имеет тип данных *sql.Rows. А так же непонятное содержимое из #, 0, ",", <, > и других символов. Уменьшить его не представляется возможным. Как и конвертировать в int. Может быть есть какие то другие способы реализации данной задачи? *Mysql

Ответы

▲ 2Принят

Для извлечения данных из кортежа предназначен метод Rows.Scan. Итерация по набору кортежей делается циклом for rows.Next() { ... }

В вашем случае это может выглядеть вот так:

    rows, err := db.Query(`SELECT max(id) FROM users`)
    if err != nil {
        panic(err)
    }
    defer rows.Close()

    var id int
    for rows.Next() {
        err = rows.Scan(&id)
        if err != nil {
            panic(err)
        }
    }
    fmt.Println("Max id: ", id)

Но в вашем случае rows слишком много. Запрос возвращает ровно один кортеж, поэтому можно написать проще

    var id int
    row := db.QueryRow(`SELECT max(id) FROM users`)
    err = row.Scan(&id)
    if err != nil {
        panic(err)
    }