Go 作用域规则

Go 作用域规则

在任何编程语言中,作用域是程序中定义变量存在的区域,超出该区域,变量将无法访问。在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)
}

当上述代码被编译和执行时,它会产生以下结果 –

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;而指针被初始化为nil。

Data Type Initial Default Value
int 0
float32 0
pointer nil

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程