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
}