Учебники

Go — Scope Rules

Область действия в любом программировании — это область программы, в которой может существовать определенная переменная, и за пределами этой переменной доступ невозможен. В языке программирования Go можно объявить переменные в трех местах:

  • Внутри функции или блока ( локальные переменные)

  • За пределами всех функций ( глобальные переменные)

  • При определении параметров функции ( формальных параметров)

Внутри функции или блока ( локальные переменные)

За пределами всех функций ( глобальные переменные)

При определении параметров функции ( формальных параметров)

Давайте выясним, что такое локальные и глобальные переменные и каковы формальные параметры.

Локальные переменные

Переменные, которые объявлены внутри функции или блока, называются локальными переменными. Они могут использоваться только операторами, которые находятся внутри этой функции или блока кода. Локальные переменные не известны функциям вне их собственных. В следующем примере используются локальные переменные. Здесь все переменные a, b и c являются локальными для функции main ().

Live Demo

package main

import "fmt"

func main() {
   /* local variable declaration */
   var a, b, c int 

   /* actual initialization */
   a = 10
   b = 20
   c = a + b

   fmt.Printf ("value of a = %d, b = %d and c = %d\n", a, b, c)
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

value of a = 10, b = 20 and c = 30

Глобальные переменные

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

Глобальная переменная может быть доступна любой функции. То есть глобальная переменная доступна для использования во всей программе после ее объявления. В следующем примере используются как глобальные, так и локальные переменные —

Live Demo

package main

import "fmt"
 
/* global variable declaration */
var g int
 
func main() {
   /* local variable declaration */
   var a, b int

   /* actual initialization */
   a = 10
   b = 20
   g = a + b

   fmt.Printf("value of a = %d, b = %d and g = %d\n", a, b, g)
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

value of a = 10, b = 20 and g = 30

Программа может иметь одинаковое имя для локальных и глобальных переменных, но значение локальной переменной внутри функции имеет преимущество. Например —

package main

import "fmt"
 
/* global variable declaration */
var g int = 20
 
func main() {
   /* local variable declaration */
   var g int = 10
 
   fmt.Printf ("value of g = %d\n",  g)
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

value of g = 10

Формальные параметры

Формальные параметры обрабатываются как локальные переменные внутри этой функции и имеют преимущество перед глобальными переменными. Например —

Live Demo

package main

import "fmt"
 
/* global variable declaration */
var a int = 20;
 
func main() {
   /* local variable declaration in main function */
   var a int = 10
   var b int = 20
   var c int = 0

   fmt.Printf("value of a in main() = %d\n",  a);
   c = sum( a, b);
   fmt.Printf("value of c in main() = %d\n",  c);
}
/* function to add two integers */
func sum(a, b int) int {
   fmt.Printf("value of a in sum() = %d\n",  a);
   fmt.Printf("value of b in sum() = %d\n",  b);

   return a + b;
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30

Инициализация локальных и глобальных переменных

Локальные и глобальные переменные инициализируются значением по умолчанию, равным 0; в то время как указатели инициализируются до нуля.