🟢 Лёгкий · 1 очк. SQL
Чем db.QueryRow отличается от db.Query в Go?
A QueryRow возвращает одну строку, не требует Close(); ошибка (включая sql.ErrNoRows) проверяется через Scan
B QueryRow быстрее, потому что не создает курсор
C Query не поддерживает WHERE
D Нет разницы, это алиасы
Объяснение вопроса

db.QueryRow() предназначен для запросов, возвращающих одну строку. Ключевые отличия от db.Query():

// QueryRow - одна строка, Close() не нужен
var name string
err := db.QueryRow("SELECT name FROM users WHERE id = $1", id).Scan(&name)
if err == sql.ErrNoRows {
    // пользователь не найден - это не ошибка
} else if err != nil {
    return err
}

// Query - множество строк, Close() обязателен
rows, err := db.Query("SELECT name FROM users")
if err != nil { return err }
defer rows.Close()
for rows.Next() {
    var name string
    rows.Scan(&name)
}
  • QueryRow автоматически закрывает ресурсы после Scan()
  • sql.ErrNoRows - специальная ошибка "нет данных", возвращается через Scan()
  • Query возвращает *sql.Rows, который держит соединение до Close()
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.