任何编程中的作用域是程序中可以存在定义的变量并且不能访问该变量的区域,在三个地方可以使用Go编程语言声明变量-
在函数或块内( local 变量)
所有函数之外( global变量)
在函数参数中( formal参数)
让我们找出什么是 local 和 global 变量以及什么是 formal 参数。
局部变量
在函数或块内声明的变量称为局部变量,它们只能由该函数或代码块中的语句使用,以下示例使用局部变量。在这里,所有变量a,b和c都是main()函数的局部变量。
package main import "fmt" func main() { /* 局部变量声明 */ var a, b, c int /* 实际初始化 */ 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" /* 全局变量声明 */ var g int func main() { /* 局部变量声明 */ var a, b int /* 局部变量声明 */ 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" /* 全局变量声明 */ var g int=20 func main() { /* 局部变量声明 */ var g int=10 fmt.Printf ("value of g=%d\n", g) }
编译并执行上述代码后,将产生以下输出-
value of g=10
参数变量
Formal参数在该函数中被视为局部变量,并且它们优先于全局变量。如-
package main import "fmt" /* 全局变量声明 */ var a int=20; func main() { /* 主函数中的局部变量声明 */ 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); } /* 两个整数相加的函数 */ 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。
数据类型 | 初始默认值 |
---|---|
int | 0 |
float32 | 0 |
pointer | nil |
参考链接
https://www.learnfk.com/go/go-scope-rules.html
标签:全局变量,作用域,fmt,局部变量,无涯,value,int,Go,main From: https://blog.51cto.com/u_14033984/8903683