一个变量(常量、类型或函数)在程序中都有一定的作用范围,称之为作用域。

了解变量的作用域对我们学习Go语言来说是比较重要的,因为Go语言会在编译时检查每个变量是否使用过,一旦出现未使用的变量,就会报编译错误。如果不能理解变量的作用域,就有可能会带来一些不明所以的编译错误。

根据变量定义位置的不同,可以分为以下三个类型:
函数内定义的变量称为局部变量
函数外定义的变量称为全局变量
函数定义中的变量称为形式参数

局部变量

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量都属于局部变量。

局部变量不是一直存在的,它只在定义它的函数被调用后存在,函数调用结束后这个局部变量就会被销毁。**

  1. package main
  2. import "fmt"
  3. func main() {
  4. var a, b, c int
  5. a = 10
  6. b = 20
  7. c = a + b
  8. fmt.Printf("结果:a =%d\n b=%d\n c=%d\n",a, b, c)
  9. }

输出内容为:

  1. 结果:a =10
  2. b=20
  3. c=30

全局变量

在函数体外声明的变量称之为全局变量,全局变量只需要在一个源文件中定义,就可以在所有源文件中使用,当然,不包含这个全局变量的源文件需要使用“import”关键字引入全局变量所在的源文件之后才能使用这个全局变量。

全局变量声明必须以 var 关键字开头,如果想要在外部包中使用全局变量的首字母必须大写。

Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会覆盖全局变量。

  1. package main
  2. import "fmt"
  3. var b = 5
  4. func main() {
  5. var a, b, c int
  6. a = 10
  7. b = 20
  8. c = a + b
  9. fmt.Printf("结果:a =%d\n b=%d\n c=%d\n",a, b, c)
  10. }

输出内容为:

  1. 结果:a =10
  2. b=20
  3. c=30

形式参数

在定义函数时函数名后面括号中的变量叫做形式参数(简称形参)。形式参数只在函数调用时才会生效,函数调用结束后就会被销毁,在函数未被调用时,函数的形参并不占用实际的存储单元,也没有实际值。

形式参数会作为函数的局部变量来使用。

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. /* 函数外声明全局变量 */
  6. var a int = 5
  7. func main() {
  8. /* 函数中声明局部变量 */
  9. var a int = 10
  10. var b int = 20
  11. var c int = 0
  12. fmt.Printf("main()函数中的a=%d\n",a)
  13. c = sum(a , b)
  14. fmt.Printf("main()函数中的c=%d\n",c)
  15. }
  16. /* 定义函数,两个数相加 */
  17. func sum(a, b int) int {
  18. fmt.Printf("sum函数中的a = %d\n",a)
  19. fmt.Printf("sum函数中的b = %d\n",b)
  20. return a + b
  21. }

输出内容为:

  1. main()函数中的a=10
  2. sum函数中的a = 10
  3. sum函数中的b = 20
  4. main()函数中的c=30