作用域,即变量作用的范围 Go 语言中变量可以在三个地方声明:
  • 函数内定义的变量称为局部变量
  • 函数外定义的变量称为全局变量
  • 函数定义中的变量称为形式参数
接下来让我们具体了解局部变量、全局变量和形式参数。

局部变量

作用域:函数块内(即花括号内)

易错点:

  1. for/while/…{}块里声明的变量,其范围仅限于该函数块内
    变量作用域 - 图1
  2. 上下包含关系和c语言一样
    变量作用域 - 图2
  3. 平级
    1. 两个相邻的函数块
    2. 函数调用是平级调用,但go的变量类型里,分为值类型和引用类型(**这个和c语言不一样**)
      1. 对于值类型,对其赋值修改不会影响main函数内的同名变量,除非通过指针修改;
      2. 对于引用类型,是可以进行赋值修改的(但有一篇文章说本质还是值类型的赋值,只是拷贝了,还不懂???
尝试——自定义函数对于main函数调用的思考:
  • 一般数值没变
  • 用指针修改变了,指针不支持和整型函数的算术运算,但是支持用指针修改变量值
  • 用数组传参,主函数内没变
  • 用切片传参,变了
实参 main函数内
1 一般数值 没变
2 指针 变了
3 数组 没变
4 切片 变了

全局变量

作用域:全局变量可以在整个包甚至外部包(被导出后)使用。全局变量可以在任何函数中使用

优先级

同名变量优先级:局部>整体,越局部,越优先——就近原则

默认初始化

go语言都会进行默认初始化,值类型初始化为0,引用类型初始化为nil,切记须知引用类型实例化后才可用,且值为其