Область видимости переменных в языке Go
Область видимости — это диапазон в исходном коде, в котором действует константа, тип, переменная, функция или пакет, представленные объявленным идентификатором.
В Go переменные можно объявлять в трёх местах:
- Переменные, определённые внутри функции, называются локальными переменными
- Переменные, определённые вне функции, называются глобальными переменными
- Переменные в определении функции называются формальными параметрами
Далее давайте подробнее рассмотрим локальные переменные, глобальные переменные и формальные параметры.
Локальные переменные
Переменные, объявленные внутри тела функции, называются локальными переменными. Их область видимости ограничена телом функции. Параметры и переменные возвращаемых значений также являются локальными переменными.
В следующем примере функция main() использует локальные переменные a, b и c:
Пример
import "fmt"
func main() {
/* объявление локальных переменных */
var a, b, c int
/* инициализация параметров */
a = 10
b = 20
c = a + b
fmt.Printf ("Результат: a = %d, b = %d и c = %d\n", a, b, c)
}
Результат вывода приведённого выше примера:
结果: a = 10, b = 20 and c = 30
Глобальные переменные
Переменные, объявленные вне тела функции, называются глобальными переменными. Глобальные переменные можно использовать во всём пакете или даже во внешних пакетах (после экспорта).
Глобальные переменные можно использовать в любой функции. Следующий пример демонстрирует, как использовать глобальные переменные:
Пример
import "fmt"
/* объявить глобальные переменные */
var g int
func main() {
/* объявление локальных переменных */
var a, b int
/* инициализация параметров */
a = 10
b = 20
g = a + b
fmt.Printf("Результат: a = %d, b = %d и g = %d\n", a, b, g)
}
Результат вывода приведённого выше примера:
结果: a = 10, b = 20 and g = 30
В программах на языке Go глобальные и локальные переменные могут иметь одинаковые имена, но локальные переменные внутри функции имеют приоритет. Вот пример:
Пример
import "fmt"
/* объявить глобальные переменные */
var g int = 20
func main() {
/* объявление локальных переменных */
var g int = 10
fmt.Printf ("Результат: g = %d\n", g)
}
Результат вывода приведённого выше примера:
结果: g = 10
Формальные параметры
Формальные параметры используются как локальные переменные функции. Вот пример:
Пример
import "fmt"
/* объявить глобальные переменные */
var a int = 20;
func main() {
/* объявить локальные переменные в функции main */
var a int = 10
var b int = 20
var c int = 0
fmt.Printf("a = %d в функции main()\n", a);
c = sum( a, b);
fmt.Printf("c = %d в функции main()\n", c);
}
/* определение функции - сложение двух чисел */
func sum(a, b int) int {
fmt.Printf("a = %d в функции sum()\n", a);
fmt.Printf("b = %d в функции sum()"\n", b);
return a + b;
}
Результат вывода приведённого выше примера:
main()函数中 a = 10 sum() 函数中 a = 10 sum() 函数中 b = 20 main()函数中 c = 30
Инициализация локальных и глобальных переменных
Значения по умолчанию для различных типов локальных и глобальных переменных:
| Типы данных | Инициализация значений по умолчанию |
|---|---|
| int | 0 |
| float32 | 0 |
| указатель | nil |