Go 中变量的范围
先决条件:Go 编程语言中的变量
变量的作用域可以定义为程序中可访问特定变量的部分。变量可以在类、方法、循环等中定义。像 C / C++ 一样,在 Golang 中,所有标识符都是词汇(或静态)范围的,即变量的范围可以在编译时确定。或者你可以说一个变量只能从定义它的代码块中调用。
变量的 Golang 作用域规则可以分为两类,这取决于变量的声明位置:
- 局部变量(在块或函数中声明)
- 全局变量(在块或函数外声明)
局部变量
- 在函数或块中声明的变量称为局部变量。这些在功能或块之外是不可访问的。
- 这些变量也可以在 for、while 语句等中声明。函数内部。
- 然而,这些变量可以被函数内部的嵌套代码块访问。
- 这些变量也被称为块变量。
- 如果这些变量在同一个作用域中用相同的名称声明两次,将会出现编译时错误。
- 这些变量在函数执行结束后不存在。
- 在循环外部声明的变量也可以在嵌套循环中访问。这意味着方法和所有循环都可以访问全局变量。局部变量可由该函数内部的循环和函数访问。
- 在循环体内部声明的变量对于循环体外部是不可见的。
示例:
// Go program to illustrate the
// local variables
package main
import "fmt"
// main function
func main() { // from here local level scope of main function starts
// local variables inside the main function
var myvariable1, myvariable2 int = 89, 45
// Display the values of the variables
fmt.Printf("The value of myvariable1 is : %d\n",
myvariable1)
fmt.Printf("The value of myvariable2 is : %d\n",
myvariable2)
} // here local level scope of main function ends
输出:
The value of myvariable1 is : 89
The value of myvariable2 is : 45
全局变量
- 在函数或块之外定义的变量称为全局变量。
- 这些在程序的整个生命周期中都是可用的。
- 这些在所有函数或块之外的程序顶部声明。
- 这些可以从程序的任何部分访问。
示例:
// Go program to illustrate the
// global variables
package main
import "fmt"
// global variable declaration
var myvariable1 int = 100
func main() { // from here local level scope starts
// local variables inside the main function
var myvariable2 int = 200
// Display the value of global variable
fmt.Printf("The value of Global myvariable1 is : %d\n",
myvariable1)
// Display the value of local variable
fmt.Printf("The value of Local myvariable2 is : %d\n",
myvariable2)
// calling the function
display()
} // here local level scope ends
// taking a function
func display() { // local level starts
// Display the value of global variable
fmt.Printf("The value of Global myvariable1 is : %d\n",
myvariable1)
} // local scope ends here
输出:
The value of Global myvariable1 is : 100
The value of Local myvariable2 is : 200
The value of Global myvariable1 is : 100
注意:如果函数内部存在一个与全局变量同名的局部变量,会发生什么?
答案很简单,即编译器会优先考虑局部变量。通常,当定义两个同名变量时,编译器会产生编译时错误。但是如果变量被定义在不同的范围内,那么编译器允许。只要定义了与全局变量同名的局部变量,编译器就会优先考虑局部变量。
-
Example: In the below program, you can clearly see the output. As myvariable1 value is 200 which is giving in function main. So you can say a local variable has a high preference over a global variable.
```go // Go program to show compiler giving preference // to a local variable over a global variable package main
import "fmt"
// global variable declaration var myvariable1 int = 100
func main() { // from here local level scope starts
// local variables inside the main function // it is same as global variable var myvariable1 int = 200
// Display the value fmt.Printf("The value of myvariable1 is : %d\n", myvariable1)
} // here local level scope ends ```
输出:
```go The value of myvariable1 is : 200
```
版权属于:月萌API www.moonapi.com,转载请注明出处