Область видимости блока
Область видимости блока в Go определяет, где доступны переменные, объявленные внутри фигурных скобок ({ ... }). Переменные, объявленные внутри блока, видны только в пределах этого блока и во всех вложенных блоках. За пределами блока эти переменные недоступны.
Синтаксис
{
// переменная видна только внутри этого блока
var x int = 10
}
// здесь x недоступна
Пример
Рассмотрим простой пример: объявим переменную внутри блока условия и попробуем использовать её снаружи:
package main
import "fmt"
func main() {
if true {
x := 100
fmt.Println("Inside block:", x)
}
// fmt.Println(x) // ошибка: x не определена вне блока
fmt.Println("Outside block")
}
Результат выполнения кода:
"Inside block: 100"
"Outside block"
Пример
Область видимости блока также работает для циклов. Переменная, объявленная в инициализации цикла, видна только внутри цикла:
package main
import "fmt"
func main() {
for i := 0; i < 3; i++ {
fmt.Println("i inside loop:", i)
}
// fmt.Println(i) // ошибка: i не определена вне цикла
fmt.Println("Loop finished")
}
Результат выполнения кода:
"i inside loop: 0"
"i inside loop: 1"
"i inside loop: 2"
"Loop finished"
Пример
Переменные, объявленные во вложенных блоках, могут переопределять переменные из внешних блоков (shadowing):
package main
import "fmt"
func main() {
x := "outer"
fmt.Println("Before inner block:", x)
{
x := "inner"
fmt.Println("Inside inner block:", x)
}
fmt.Println("After inner block:", x)
}
Результат выполнения кода:
"Before inner block: outer"
"Inside inner block: inner"
"After inner block: outer"
Смотрите также
-
область видимости пакета
package-scope,
которая определяет доступность переменных на уровне пакета -
область видимости функции
function-scope,
которая охватывает всю функцию -
затенение переменных
shadowing,
которое позволяет переопределять переменные во вложенных блоках -
область видимости файла
file-scope,
которая ограничивает видимость импортов