В чем разница между объявлением переменной через `var` и оператор короткого объявления `:=` в Go?

Ответ

Основное различие заключается в области видимости, необходимости инициализации и явном указании типа.

var — это универсальный способ объявления переменных. := — это синтаксический сахар для объявления и инициализации переменной внутри функции.

Сравнительная таблица:

Характеристикаvar:= (короткое объявление)
Область видимостиУровень пакета, функцииТолько внутри функции или блока
ИнициализацияНеобязательна (переменная получит zero-value)Обязательна
Указание типаМожно указать явно, либо тип выводится из значенияТип всегда выводится из значения
ПереопределениеНельзя переопределить в той же области видимостиМожно использовать, если хотя бы одна переменная слева новая

Примеры:

// 1. Область видимости
var globalVar = "Это глобальная переменная"

func main() {
    // a := "локальная" // Ошибка: := нельзя на уровне пакета
    var functionVar = "Это переменная функции"
    shortVar := "Это тоже переменная функции"
}
// 2. Инициализация и тип
var i int // i == 0 (zero-value для int)
var s = "hello" // тип string выводится автоматически

j := 42 // тип int выводится автоматически
// 3. Особенность := при присваивании

// file, err := os.Open("file.txt") // Объявляются две новые переменные
// n, err := file.Read(buf)         // OK: 'n' - новая, 'err' - уже существует. 
                                  // 'err' будет переопределена.