QueryRow(). Scan() возвращает ошибку, если строка не существует
Я хочу получить одну строку из базы данных SQL. Я использую следующий код:
var name string
row := db.Con().QueryRow("SELECT name FROM users WHERE id = 2;")
err := row.Scan(&name)
if err != nil {
// log the error
}
Например: если пользователь с id=2
не существует, метод Scan
возвращает ошибку.
Вопрос:
Есть ли способ избежать этой ошибки, когда строка не существует? Потому что это абсолютно нормально, и я не хочу регистрировать такие ошибки.
Единственный способ, который я нашел, - это использовать Query
вместо QueryRow
, но это не удобно, потому что мне приходится добавлять for rows.Next() { ..
каждый раз, когда я хочу получить одну строку.
Ответы
Ответ 1
Просто проверьте наличие ошибки, которую вы не хотите регистрировать до регистрации:
var name string
row := db.Con().QueryRow("SELECT name FROM users WHERE id = 2;")
err := row.Scan(&name)
if err != nil && err != sql.ErrNoRows {
// log the error
}