Локальні та Глобальні Області Видимості
Свайпніть щоб показати меню
На цьому етапі важливо розглянути поняття областей видимості, щоб зрозуміти, де саме можна отримати доступ до певних змінних (або констант), а де — ні.
Область видимості змінної або константи визначає, де її можна використовувати.
Коли змінна або константа оголошується поза будь-яким блоком коду, вона стає доступною у всій програмі, отримуючи статус глобальної області видимості. У наступному фрагменті коду константа pi є прикладом такої глобальної області видимості:
index.go
12345678package main import "fmt" const pi float32 = 3.1415 func main() { fmt.Println(pi) }
Навпаки, коли змінна або константа оголошується всередині блоку коду, вона залишається доступною лише в межах цього конкретного блоку коду та будь-яких вкладених блоків, якщо такі є.
Наведена нижче ілюстрація окреслює відмінності між глобальною та локальною областями видимості:
Наступний код демонструє області, де доступ до змінних дозволений, а також місця, де можуть виникати помилки:
index.go
12345678910111213141516171819202122232425262728package main import "fmt" func main() { var value_1 int = 1 // Condition 1 if(true) { var value_2 int = 2 // Condition 2 if (true) { var value_3 int = 3 fmt.Println("In Condition 2:", value_1) fmt.Println("In Condition 2:", value_2) fmt.Println("In Condition 2:", value_3) } fmt.Println("In Condition 1:", value_1) fmt.Println("In Condition 1:", value_2) fmt.Println("In Condition 1:", value_3) // Error here } fmt.Println("In Main:", value_1) fmt.Println("In Main:", value_2) // Error here fmt.Println("In Main:", value_3) // Error here }
Змінна value_1 залишається доступною протягом усього блоку коду main(), включаючи вкладені блоки, такі як Умова 1 та Умова 2. Вона також доступна у межах Умови 1 та її вкладеної Умови 2.
Однак спроба безпосередньо звернутися до неї поза межами блоку main() призведе до помилки. Аналогічно, змінна value_2, оголошена у межах Умови 2, доступна лише у цьому конкретному блоці коду.
Важливо враховувати області видимості у контексті функцій. Коли ми оголошуємо змінну або константу всередині функції, вона залишається обмеженою цією функцією і недоступна в інших функціях, включаючи main().
Note
main()виконує роль автоматично виконуваної функції під час запуску програми.
index.go
12345678func myFunc() { var number int = 7 fmt.Println(number) // Accessible here } func main() { fmt.Println(number) // Not accessible here }
Ще один важливий момент: не можна оголошувати дві або більше змінних з однаковим ім'ям у межах однієї області видимості або у перетинаючихся областях видимості.
index.go
1234567891011func myFunc1() { var number int = 7 var number int = 9 // Error here } func myFunc2() { var number int = 7 if(2 > 1) { var number int = 9 // Error here } }
Однак можливо оголошувати змінні з однаковими іменами в різних областях видимості:
index.go
1234567891011121314151617package main import "fmt" func myFunc1() { var number int = 7 fmt.Println("In Func 1:", number) } func myFunc2() { var number int = 9 fmt.Println("In Func 2:", number) } func main() { myFunc1() myFunc2() }
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат