cpp

Области видимости переменных

Прежде чем использовать переменную, ее необходимо предварительно объявить. До объявления переменной, она не видна в программе. Объявить переменную можно глобально (вне функций) или локально (внутри функции или блока).

  • Глобальные переменные — это переменные, объявленные внутри пакета вне функций. Глобальные переменные видны в любой части пакета, включая функции. Инициализация таких переменных производится только один раз. Если первая буква названия глобальной переменной является заглавной, то к ней можно получить доступ из другого пакета.
  • Локальные переменные — это переменные, которые объявлены внутри функции или блока (области, ограниченной фигурными скобками). Локальные переменные видны только внутри функции или блока. Инициализация таких переменных производится при каждом вызове функции или входе в блок. После выхода из функции или блока локальная переменная уничтожается.

Если имя локальной переменной совпадает с именем глобальной переменной, то все операции внутри функции осуществляются с локальной переменной, а значение глобальной не изменяется.

Область видимости глобальных и локальных переменных показана в листинге 2.3.

Листинг 2.3. Область видимости переменных

package main

import "fmt"

var x int = 10                    // Глобальная переменная

func main() {
   test()
   // Вывод значения глобальной переменной x
   fmt.Println(x)                 // 10
   { // Блок
      z := 30                     // Локальная переменная
      fmt.Println(z)              // 30
   }
   // Переменная z здесь уже не видна!!!
   for i := 0; i < 10; i++ {
      fmt.Println(i)              // 30
   }
   // Переменная i здесь уже не видна!!!
}
func test() {
   var x int = 5                  // Локальная переменная
   // Вывод значения локальной переменной x
   fmt.Println(x)                 // 5
}

Очень важно учитывать, что переменная, объявленная внутри блока, видна только в пределах блока (внутри фигурных скобок). Например, присвоим значение переменной в зависимости от некоторого условия:

// Неправильно!!!
if x == 10 { // Какое-то условие
   var y int
   y = 5
   fmt.Println(y)
} else {
   var y int
   y = 25
   fmt.Println(y)
}
// Переменная y здесь не определена!!!

В этом примере переменная y видна только внутри блока. После условного оператора if переменной не существует. Чтобы переменная была видна внутри блока и после выхода из него, необходимо поместить объявление переменной перед блоком:

// Правильно
var y int
if x == 10 { // Какое-то условие
   y = 5
} else {
   y = 25
}
fmt.Println(y)

Если обращение к переменной внутри функции или блока производится до объявления одноименной локальной переменной, то до объявления будет использоваться глобальная переменная, а после объявления — локальная переменная (листинг 2.4). Если глобальной переменной с таким названием не существует, то будет ошибка при компиляции.

Листинг 2.4. Обращение к переменной до объявления внутри функции

package main

import "fmt"

var x int = 10                    // Глобальная переменная

func main() {
   // Вывод значения глобальной переменной x
   fmt.Println(x)                 // 10
   var x int = 5                  // Локальная переменная
   // Вывод значения локальной переменной x
   fmt.Println(x)                 // 5
}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp