Переменные, константы и базовые типы
Содержание курса
В предыдущих уроках вы уже написали программу, которая компилируется и запускается. Теперь разберёмся, как Go работает с данными — как объявить переменную, задать ей тип и значение, и почему компилятор не даст вам сделать это «не так».
var и := — объявление переменных и ограничение области видимости :=
У var три рабочие формы, и между ними есть реальная разница.
var x int — объявляет переменную типа int без начального значения. Go сразу присваивает ей нулевое значение, в данном случае 0. Никакой «неинициализированной памяти» здесь нет: компилятор гарантирует, что переменная готова к использованию.
var x int = 42 — тип и значение указаны явно. Это бывает полезно, когда вы хотите зафиксировать тип, а значение правой части могло бы подойти и для другого.
var x = 42 — тип выводится из значения. Компилятор видит целочисленный литерал 42 и делает x типом int.
Теперь :=. Это сокращённая форма для объявления и инициализации в одном выражении:
package main
import "fmt"
func main() {
x := 42
fmt.Println(x) // 42
}
Тип x здесь int — вывелся из 42. Запись := короче, и в теле функций она встречается чаще всего.
Главное ограничение: := работает только внутри функции. Попробуйте вынести его на уровень пакета:
package main
x := 42 // вне функции
func main() {}
Компилятор ответит:
syntax error: non-declaration statement outside function body
Это не предупреждение — программа не скомпилируется. На уровне пакета переменные объявляются только через var. Разграничение простое: var — везде, := — только внутри func.
Ещё один момент про :=: если в левой части несколько имён, хотя бы одно из них должно быть новым в текущей области видимости. Иначе компилятор снова откажет — повторное объявление уже существующей переменной через := в той же области недопустимо.
