English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Препятствие:Переменные языка Go
Область видимости переменной может быть определена как часть программы, которая может доступ к этой переменной. Переменные могут быть определены в классах, методах, циклах и т.д. Как в C / Как и в C++В Golang все идентификаторы都具有 лексический (или статический) область видимости, то есть область видимости переменной может быть определена на этапе компиляции. Или можно сказать, что переменная может быть вызывать только из кода блока, в котором она была определена.
Правила области видимости переменных в Golang можно разделить на две категории, в зависимости от места их объявления:
Локальные переменные(внутри блока или функции)
Глобальные переменные(вне блока или функции)
Переменные, объявленные в функции или блоке, называются локальными переменными. Эти переменные не могут быть доступ к за пределами функции или блока.
Эти переменные также могут быть объявлены внутри функции с использованием для, while и других предложений.
Эти переменные также могут быть доступны из вложенного кода в функции.
Эти переменные также называются блоковыми переменными.
Если эти переменные будут объявлены дважды в одной и той же области видимости, то会出现编译 ошибок.
После выполнения функции эти переменные больше не существуют.
Переменные, объявленные вне цикла, также доступны в вложенных циклах. Это означает, что методы и все циклы могут доступ к глобальным переменным. Локальные переменные могут быть доступ к циклу и выполняться в функции.
В переменных, объявленных в цикле, не видны вне цикла.
//局部变量 package main import "fmt" //主函数 func main() { //从这里开始主函数的局部作用域 // Локальная переменная в функции main var myvariable1, myvariable2 int = 69, 145 // 显示变量的值 fmt.Printf("myvariable1 变量的值 : %d\n", myvariable1) fmt.Printf("Значение переменной myvariable2: %d\n", myvariable2) } // Здесь заканчивается локальная область действия основного функции
Вывод:
Значение переменной myvariable1: 69 Значение переменной myvariable2: 145
Переменные, определенные за пределами функции или блока, называются глобальными переменными.
Эти переменные доступны на протяжении всего жизненного цикла программы.
Эти переменные объявляются в верхней части программы за пределами всех функций или блоков.
Эти переменные можно получить из любой части программы.
// Глобальная переменная package main import "fmt" // Объявление глобальной переменной var myvariable1 int = 100 func main() { // Локальная переменная в функции main var myvariable2 int = 200 // Показ глобальной переменной fmt.Printf("Значение глобальной переменной myvariable1 составляет: %d\n", myvariable1) // Показ локальной переменной fmt.Printf("Значение локальной переменной myvariable2 составляет: %d\n", myvariable2) // Вызов функции display() } func display() { // Показ глобальной переменной fmt.Printf("Значение глобальной переменной myvariable1 составляет: %d\n", myvariable1) }
Вывод:
Значение глобальной переменной myvariable1 составляет: 100 Значение локальной переменной myvariable2 составляет: 200 Значение глобальной переменной myvariable1 составляет: 100
Обратите внимание:Что会发生, если в функции будет локальная переменная с тем же именем, что и глобальная переменная?
Ответ прост, компилятор предпочитает локальные переменные. Обычно, когда определены две переменные с одинаковым именем, компилятор генерирует ошибку времени компиляции. Но если переменные определены в разных диапазонах, компилятор позволяет это. Компилятор предпочитает локальную переменную, если определена локальная переменная с тем же именем, что и глобальная переменная.
Пример:В следующей программе вы можете清楚地 увидеть вывод. Поскольку значение myvariable1 составляет 200, это указано в функции main. Таким образом, можно сказать, что локальные переменные имеют более высокий приоритет, чем глобальные переменные.
// Программа Go показывает приоритет компилятора // Локальная переменная над глобальной переменной package main import "fmt" // Объявление глобальной переменной var myvariable1 int = 100 func main() { // Локальная переменная в функции main // Как и глобальная переменная var myvariable1 int = 200 // Показ fmt.Printf("Значение переменной myvariable1 составляет: %d\n", myvariable1) }
Вывод:
Значение переменной myvariable1 составляет: 200