Unetway

Go - Scope

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

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

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

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

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

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)
}

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

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

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

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)
}

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

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

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;
}

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

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

Тип данных Значение по умолчанию
int 0
float32 0
pointer nil