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