- Go 教程
- Go - 首页
- Go - 概述
- Go - 环境搭建
- Go - 程序结构
- Go - 基本语法
- Go - 数据类型
- Go - 变量
- Go - 常量
- Go - 运算符
- Go - 决策语句
- Go - 循环语句
- Go - 函数
- Go - 变量作用域
- Go - 字符串
- Go - 数组
- Go - 指针
- Go - 结构体
- Go - 切片
- Go - 范围
- Go - 映射
- Go - 递归
- Go - 类型转换
- Go - 接口
- Go - 错误处理
- Go 有用资源
- Go - 问题与解答
- Go - 快速指南
- Go - 有用资源
- 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。
数据类型 | 初始默认值 |
---|---|
int | 0 |
float32 | 0 |
指针 | nil |
广告