Go 语言编程 — 作用域

举报
云物互联 发表于 2021/08/05 23:13:30 2021/08/05
【摘要】 目录 文章目录 目录作用域局部变量全局变量 变量的生命周期 作用域 作用域是已声明标识符所表示的常量、类型、变量、函数、或包在源代码中的作用范围(有效性范围)。 注意,声明了的局部变量必须被引用,否则会触发异常。全局变量则不需要,因为编译器会考虑该全局变量是否会在其他地方被引用。 局部变量 在函数体内声明的变量称之为局部变量,它们的作用域只在...

目录

作用域

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

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

局部变量

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

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)
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

全局变量

在函数体外声明的变量称之为全局变量,作用域为整个包(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)
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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

package main

import "fmt"

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

func main() { /* 声明局部变量 */ var g int = 10 fmt.Printf ("结果: g = %d\n",  g)
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结果:

结果: g = 10

  
 
  • 1

变量的生命周期

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

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

文章来源: is-cloud.blog.csdn.net,作者:范桂飓,版权归原作者所有,如需转载,请联系作者。

原文链接:is-cloud.blog.csdn.net/article/details/108270193

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。