Как преобразовать тип *sql.Rows в int? Golang(Go)
Моя цель - создать проверку регистрации. Не занято ли имя, email и тд. Так как я новичок я решил сделать это простым способом. Узнать max id и начать уменьшать этот id каждый раз проверяя не совпадают ли значения. Я узнал максимальный id при помощи команды:
Select max(`id`) from `users`
Но теперь, переменная в которую я записал это значение имеет тип данных *sql.Rows. А так же непонятное содержимое из #, 0, ",", <, > и других символов. Уменьшить его не представляется возможным. Как и конвертировать в int. Может быть есть какие то другие способы реализации данной задачи? *Mysql
Ответы (1 шт):
Для извлечения данных из кортежа предназначен метод 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)
}