Go - правила области действия
Область видимости в любом программировании - это область программы, в которой может существовать определенная переменная, и за ее пределами доступ к переменной невозможен. Есть три места, где переменные могут быть объявлены на языке программирования Go:
Внутри функции или блока (local переменные)
Вне всех функций (global переменные)
В определении параметров функции (formal параметры)
Давайте узнаем, что есть local и global переменные и что такое formal параметры.
Локальные переменные
Переменные, объявленные внутри функции или блока, называются локальными переменными. Они могут использоваться только операторами, которые находятся внутри этой функции или блока кода. Локальные переменные не известны функциям вне их собственных. В следующем примере используются локальные переменные. Здесь все переменные 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)
}
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
value of a = 10, b = 20 and c = 30
Глобальные переменные
Глобальные переменные определяются вне функции, обычно поверх программы. Глобальные переменные сохраняют свое значение в течение всего времени существования программы, и к ним можно получить доступ внутри любой из функций, определенных для программы.
Доступ к глобальной переменной может получить любая функция. То есть глобальная переменная доступна для использования во всей программе после ее объявления. В следующем примере используются как глобальные, так и локальные переменные -
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
Формальные параметры
Формальные параметры обрабатываются как локальные переменные внутри этой функции и имеют преимущество перед глобальными переменными. Например -
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; в то время как указатели инициализируются нулем.
Тип данных | Начальное значение по умолчанию |
---|---|
int | 0 |
float32 | 0 |
указатель | ноль |