Ответ
Основное различие заключается в области видимости, необходимости инициализации и явном указании типа.
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' будет переопределена.