В Go переменные объявляются с помощью ключевого слова var
:
var name string
name = "Hexlet"
Переменной name
задаётся имя и тип (string
). Позже в неё можно присвоить значение. Объявление и присваивание можно объединить:
var name string = "Hexlet"
После этого переменной можно присвоить другое значение того же типа:
name = "Code Basics"
Go — строго типизированный язык, поэтому тип переменной фиксирован: если name объявлена как строка, в неё нельзя записать число или логическое значение.
Значения по умолчанию
Если переменную объявить без инициализации, она получит значение по умолчанию. Для строк это пустая строка, для чисел — ноль, для булевых значений — false.
var name string // ""
var count int // 0
var active bool // false
Вывод типа
Если при объявлении переменной сразу указать значение, тип можно не писать — компилятор выведет его сам на основе переданного значения. Это упрощает запись, особенно когда тип очевиден:
var name = "Hexlet"
var count = 10 // int
var active = true // bool
При этом тип сохраняется за переменной, как если бы он был написан явно. В дальнейшем переменной можно присваивать только значения этого типа. Попытка записать значение другого типа приведёт к ошибке компиляции. Например, если name была строкой, то присваивать ей число нельзя.
Вывод типа работает только при одновременном объявлении и инициализации. Если вы просто пишете var city, без значения, то компилятор не сможет вывести тип и выдаст ошибку. В таких случаях тип нужно указывать явно:
var city // ошибка: тип не указан
var city string // правильно
Краткая форма объявления
Внутри функций можно использовать сокращённую форму объявления переменной с помощью оператора :=
:
name := "Hexlet"
Эта форма позволяет одновременно создать переменную и присвоить ей значение. Тип по-прежнему выводится автоматически. Такой синтаксис упрощает запись и активно используется в Go-коде. Важно помнить, что :=
работает только внутри функций. Вне функции можно использовать только var
.
С помощью :=
можно объявлять несколько переменных сразу:
name, course := "Hexlet", "Go"
При этом типы обеих переменных будут выведены по значениям. Такой способ часто используется при обработке нескольких значений, например при возврате значений из функции.
Особенности
- Все переменные должны использоваться — иначе ошибка компиляции.
- Имя переменной нельзя использовать до её объявления.