РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
906 of 1593 menu

Затенение переменных

Затенение (shadowing) переменных в Go - это ситуация, при которой во вложенной области видимости объявляется переменная с именем, уже существующим во внешней области. В результате вложенная переменная "затеняет" внешнюю, и все обращения к этому имени во внутренней области будут относиться к новой переменной. Это важный механизм, который следует понимать, чтобы избегать неожиданного поведения в коде.

Синтаксис

// Объявление переменной во внешней области x := 10 // Во вложенной области объявляется переменная с тем же именем if x := 20; x > 10 { // Здесь x = 20, внешняя x затенена fmt.Println(x) } // Здесь x = 10, внешняя переменная снова доступна

Пример с функцией

Рассмотрим пример, где переменная в функции затеняет глобальную переменную:

package main import "fmt" var value int = 5 func main() { fmt.Println("Global value:", value) value := 10 fmt.Println("Local value:", value) }

Результат выполнения кода:

"Global value: 5" "Local value: 10"

Пример с блоком if

Затенение может происходить внутри блоков, таких как if, for или switch. В этом примере создается новая переменная внутри блока if:

package main import "fmt" func main() { x := 15 fmt.Println("Before if block:", x) if x := 25; x > 20 { fmt.Println("Inside if block:", x) } fmt.Println("After if block:", x) }

Результат выполнения кода:

"Before if block: 15" "Inside if block: 25" "After if block: 15"

Пример с циклом for

В этом примере переменная внутри цикла for затеняет переменную из внешней области:

package main import "fmt" func main() { index := 0 fmt.Println("Before loop:", index) for index := 0; index < 3; index++ { fmt.Println("Inside loop:", index) } fmt.Println("After loop:", index) }

Результат выполнения кода:

"Before loop: 0" "Inside loop: 0" "Inside loop: 1" "Inside loop: 2" "After loop: 0"

Смотрите также

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