Ответ
В Go существуют два основных способа объявления переменных: стандартное объявление с помощью ключевого слова var
и короткое объявление с помощью оператора :=
. У них есть ключевые различия.
Характеристика | var (Стандартное объявление) | := (Короткое объявление) |
---|---|---|
Область видимости | Можно использовать на уровне пакета (вне функций) и внутри функций. | Можно использовать только внутри функций или других блоках кода (if , for ). |
Инициализация | Необязательна. Если значение не указано, переменной присваивается нулевое значение её типа (0, false , "" , nil ). | Обязательна. Переменная должна быть инициализирована в момент объявления. |
Указание типа | Тип можно указать явно (var i int ) или позволить компилятору его вывести (var i = 10 ). | Тип всегда выводится автоматически из значения справа. |
Переопределение | Нельзя использовать для уже объявленной в той же области видимости переменной. | Может "переобъявлять" существующие переменные, если в левой части есть хотя бы одна новая переменная. |
Пример:
package main
import "fmt"
var packageScopeVar = "Доступна во всем пакете"
// shortScopeVar := "Ошибка, := нельзя на уровне пакета"
func main() {
// 1. Объявление с нулевым значением
var zeroInt int
fmt.Printf("zeroInt: %vn", zeroInt) // Выведет: 0
// 2. Короткое объявление
i := 42
fmt.Printf("i: %T, %vn", i, i) // Выведет: int, 42
// 3. "Переопределение" с помощью :=
i, j := 100, "hello"
fmt.Printf("i: %v, j: %vn", i, j) // i перезаписана, j - новая переменная
}
Когда что использовать:
:=
— предпочтительный способ внутри функций для краткости и читаемости.var
— используется, когда:- Нужно объявить переменную на уровне пакета.
- Нужно объявить переменную без немедленной инициализации (положиться на нулевое значение).
- Тип переменной не очевиден, и вы хотите указать его явно (например, при работе с интерфейсами).