Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goPmScSh 263 of 350 menu
◀ ▶

Затенение имени в Go

Затенение появляется, когда во вложенном блоке объявляют имя, которое уже есть снаружи. Внутреннее имя с тем же названием закрывает внешнее до конца блока. Внутри скобок команды читают внутреннюю переменную, после скобок снова видна внешняя.

Короткое объявление с одним уже известным именем в той же области повторно не создает переменную и не собирается. Если слева от := все имена уже объявлены в этой области, нужен знак =:

n := 1 n := 2

Во вложенном блоке можно снова написать := с тем же именем. Это новая переменная для внутренней области:

n := 1 { n := 2 fmt.Println(n) } fmt.Println(n)

Сначала на экране 2, затем 1. Снаружи блока остается старое значение внешнего n.

Если слева от := есть хотя бы одно новое имя, запись собирается. Старое имя в списке не затеняют, а обновляют. После такого блока внешнее n уже 2, а extra снаружи скобок не видно:

n := 1 { n, extra := 2, 3 fmt.Println(n) fmt.Println(extra) } fmt.Println(n)

Дан следующий код:

x := 5 { x := 9 fmt.Println(x) } fmt.Println(x)

Скажите, что выведется.

Дан следующий код:

a := 1 a := 4

Скажите, соберется ли программа.

Даны переменные:

m := 0

Во вложенном блоке объявите m заново со значением 7, выведите его внутри блока, затем выведите m снаружи. Скажите оба числа на экране.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить