Блок и область видимости в Go
Фигурные скобки без if и без цикла тоже задают свою область. Имя из короткого объявления внутри такого блока видно только между открывающей и закрывающей скобкой. После скобки обращаться к нему нельзя.
Объявим число внутри простого блока и выведем его там же:
{
slot := 3
fmt.Println(slot)
}
На экране 3. Следующая команда уже
вне области slot:
{
slot := 3
}
fmt.Println(slot)
Вложенные блоки работают так же. Внутренний блок может читать имя из внешнего блока той же функции, пока внутри не появилось затенение:
base := 1
{
fmt.Println(base)
{
inner := 2
fmt.Println(inner)
}
}
Дан следующий код:
{
key := "x"
}
fmt.Println(key)
Скажите, соберется ли программа.
Дана переменная:
outer := 4
Внутри блока без условия выведите outer.
Скажите, почему это допустимо.
Дан следующий код:
{
{
v := 1
}
fmt.Println(v)
}
Скажите, соберется ли программа.