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()