Go 语言编程 — 作用域

目录

作用域

作用域是已声明标识符所表示的常量、类型、变量、函数、或包在源代码中的作用范围(有效性范围)。

注意,声明了的局部变量必须被引用,否则会触发异常。全局变量则不需要,因为编译器会考虑该全局变量是否会在其他地方被引用。

局部变量

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

package main

import "fmt"

func main() {

   /* 声明局部变量 */
   var a, b, c int

   /* 初始化参数 */
   a = 10
   b = 20
   c = a + b

   fmt.Printf ("结果: a = %d, b = %d and c = %d\n", a, b, c)
}

全局变量

在函数体外声明的变量称之为全局变量,作用域为整个包(Package),可以在包内的任何函数中使用。

需要注意的是,包内有效变量的可导出性由变量名称的首字母大小写决定。

  • 小写:不可导出,外部包无法导入。
  • 大写:可导出,外包可以导入。
package main

import "fmt"

/* 声明全局变量 */
var g int

func main() {

   /* 声明局部变量 */
   var a, b int

   /* 初始化参数 */
   a = 10
   b = 20
   g = a + b

   fmt.Printf("结果: a = %d, b = %d and g = %d\n", a, b, g)
}

注意:当全局变量和局部变量重名时,优先考虑局部变量。

package main

import "fmt"

/* 声明全局变量 */
var g int = 20

func main() {
   /* 声明局部变量 */
   var g int = 10

   fmt.Printf ("结果: g = %d\n",  g)
}

结果:

结果: g = 10

变量的生命周期

包级别的全局变量在 main 函数开始前会完成变量的初始化;而局部变量则在函数执行期间(声明时)完成初始化。

包级别的全局变量的生命周期是程序的运行期间;而局部变量的生命周期是生存至垃圾回收。所以,出于性能考虑,应该减少局部变量逃逸的情况,从而减少 GC。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范桂飓

文章对您有帮助就请一键三连:)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值