Переназначение в Go | OTUS

Переназначение в Go

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

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

1-20219-b81efa.png

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

2-20219-ea9605.png

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

3-20219-e8ca38.png

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

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

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

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

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

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто