Переназначение в Go
2026-03-10 22:33 Diff

Теги: go, golang, переназначение

В языке программирования Golang существуют такие понятия, как повторная декларация и переназначение. Рассмотрим их подробнее.

Форма краткой декларации := работает так:

Ниже -- объявление, вызываемое os.Open:

Данный оператор объявляет 2 переменные: f и err. При этом несколько строк спустя происходит вызов f.Stat:

Вызов f.Stat выглядит, как будто он объявляет d и err. Но ведь err появляется в обоих операторах. На самом деле, такое дублирование допускается, ведь err хоть и объявляется первым оператором, но переназначается вторым. Что это значит? Например, то, что вызов f.Stat задействует существующую переменную err, которая уже объявлена ​​выше, следовательно, он всего лишь дает ей новое значение.

При этом в объявлении := v-переменная может появляться даже в том случае, если она уже объявлялась, однако есть условия:

  • объявление находится в той же самой области, что и уже существующее объявление v (когда v уже является объявленной во внешней области видимости, объявление в итоге создаст новую переменную);
  • можно присвоить v соответствующее значение в инициализации;
  • в объявлении существует как минимум еще одна переменная, объявляемая заново.

Такое необычное свойство является, по сути, чистым прагматизмом, облегчающим применение одного значения err, к примеру, в длинной цепочке if-else. На практике это используется довольно часто. Также важно отметить, что в языке Golang область действия как параметров функции, так и возвращаемых значений считается тем же самым, что и в случае с телом функции, причем даже тогда, когда они появляются лексически за пределами фигурных скобок, заключающих в себе тело.

По материалам https://golang-blog.blogspot.com/.