一个变量(常量、类型或函数)在程序中都有一定的作用范围,称之为作用域。
了解变量的作用域对我们学习Go语言来说是比较重要的,因为Go语言会在编译时检查每个变量是否使用过,一旦出现未使用的变量,就会报编译错误。如果不能理解变量的作用域,就有可能会带来一些不明所以的编译错误。
根据变量定义位置的不同,可以分为以下三个类型:
函数内定义的变量称为局部变量
函数外定义的变量称为全局变量
函数定义中的变量称为形式参数
局部变量
在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量都属于局部变量。
局部变量不是一直存在的,它只在定义它的函数被调用后存在,函数调用结束后这个局部变量就会被销毁。**
package mainimport "fmt"func main() {var a, b, c inta = 10b = 20c = a + bfmt.Printf("结果:a =%d\n b=%d\n c=%d\n",a, b, c)}
输出内容为:
结果:a =10b=20c=30
全局变量
在函数体外声明的变量称之为全局变量,全局变量只需要在一个源文件中定义,就可以在所有源文件中使用,当然,不包含这个全局变量的源文件需要使用“import”关键字引入全局变量所在的源文件之后才能使用这个全局变量。
全局变量声明必须以 var 关键字开头,如果想要在外部包中使用全局变量的首字母必须大写。
Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会覆盖全局变量。
package mainimport "fmt"var b = 5func main() {var a, b, c inta = 10b = 20c = a + bfmt.Printf("结果:a =%d\n b=%d\n c=%d\n",a, b, c)}
输出内容为:
结果:a =10b=20c=30
形式参数
在定义函数时函数名后面括号中的变量叫做形式参数(简称形参)。形式参数只在函数调用时才会生效,函数调用结束后就会被销毁,在函数未被调用时,函数的形参并不占用实际的存储单元,也没有实际值。
形式参数会作为函数的局部变量来使用。
package mainimport ("fmt")/* 函数外声明全局变量 */var a int = 5func main() {/* 函数中声明局部变量 */var a int = 10var b int = 20var c int = 0fmt.Printf("main()函数中的a=%d\n",a)c = sum(a , b)fmt.Printf("main()函数中的c=%d\n",c)}/* 定义函数,两个数相加 */func sum(a, b int) int {fmt.Printf("sum函数中的a = %d\n",a)fmt.Printf("sum函数中的b = %d\n",b)return a + b}
输出内容为:
main()函数中的a=10sum函数中的a = 10sum函数中的b = 20main()函数中的c=30
