На этом шаге продолжим рассматривать основы языка Go и познакомимся с объявлением переменных.
Объявление var создает переменную определенного типа, назначает ей имя и присваивает начальное значение. Каждое объявление имеет общий вид
var имя тип = выражение //тип или = выражение может отсутствовать
Если опущен тип, то он определяется из инициализирующего выражения. Если же опущено выражение, то начальным значением является нулевое значение для данного типа:
Рассмотрим примеры объявления переменных:
var i int // переменная; значение 0; тип: int var debug = false // переменная; определяемый компилятором тип: bool
Несколько переменных можно объявить и (необязательно) инициализировать в одном объявлении var, используя соответствующий список выражений. Пропущенный тип позволяет объявлять несколько переменных разных типов, например:
var i, j, k int // int, int, int var s, b, f = "строка”, true, 2.3 // string, bool, float64
Инициализаторы могут быть литеральными значениями или произвольными выражениями. Переменные уровня пакета инициализируются до начала выполнения функции main, локальные переменные инициализируются тогда, когда встречаются их объявления в процессе выполнения функции.
Множество переменных может также быть инициализировано с помощью вызова функции, возвращающей несколько значений, например:
var f, err = os.Open(name) // os.Open возвращает имя файла и ошибку
В функции для объявления и инициализации локальных переменных может использоваться альтернативная форма объявления, именуемая кратким объявлением переменной. Она имеет вид
имя := выражение,
first := -19 // переменная; определяемый компилятором тип: int last := int64(9876543210) // переменная; тип: int64 result := true // переменная; определяемый компилятором тип: bool step := 1.5 // переменная; определяемый компилятором тип: float64 str := "строка" // переменная; определяемый компилятором тип: string
В одном кратком объявлении можно объявить и инициализировать несколько переменных, например
i, j := 0, 1 // i = 0, j = 1
Краткие объявления переменных могут использоваться для вызовов функций наподобие os.Open, которые возвращают два или больше значений, например:
f, err := os.Open(name)
if err != nil {
return err
}
// использование f
f.Close()
Если некоторые из переменных уже были объявлены в том же лексическом блоке, то для этих переменных краткие объявления действуют как присваивания, например:
in, err := os.Open(infile) //объявляем in и err out, err := os.Create(outfile) //объявляем out и присваиваем значение err
Краткое объявление переменной должно объявлять по крайней мере одну новую переменную, например, приведенный ниже код не компилируется:
in, err := os.Open(infile)
in, err:= os.Create(outfile) // Ошибка: нет новой переменной
//(для устранения ошибки следует
//использовать присваивание "=")
Время жизни переменной - это интервал времени выполнения программы, в течение которого она существует. Переменные уровня пакета существуют все время работы программы. Локальные переменные имеют динамическое время жизни: новый экземпляр создается всякий раз, когда выполняется оператор объявления, и переменная живет до тех пор, пока она становится недоступной, после чего выделенная для нее память может быть использована повторно. Параметры и результаты функций являются локальными переменными - они создаются всякий раз, когда вызывается их функция.
На следующем шаге рассмотрим логические значения и выражения в Go.