Go的变量作用域
Posted demon_gdy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go的变量作用域相关的知识,希望对你有一定的参考价值。
Go 语言变量作用域
作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。
Go 语言中变量可以在三个地方声明:
- 函数内部定义的变量称为局部变量
- 函数外部定义的变量称为全局变量
- 函数定义中传的变量称为形式参数
局部变量
在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。
栗子~
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func plus() int{ 8 //声明并初始化局部变量num1,num2 9 num1 := 10 10 num2 := 20 11 sum := num1 + num2 12 //和作为返回值返回 13 return sum 14 } 15 16 func main(){ 17 //调用plus函数并输出返回的结果 18 fmt.Println(plus()) 19 /*这个执行会报错undefined: num1,因为这个num1的作用域在plus函数内,所以main函数是无法调用的 20 fmt.Println(num1) 21 */ 22 }
全局变量
在函数体外声明的变量称之为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用。
全局变量可以在任何函数中使用,以下实例演示了如何使用全局变量:
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 var ( 8 //定义全局变量num1,numu2 9 num1 int = 10 10 num2 int = 20 11 ) 12 func plus() int { 13 fmt.Println("plus函数内部调用num1:", num1) 14 fmt.Println("plus函数内部调用num2:", num2) 15 sum := num1 + num2 16 //和作为返回值返回 17 return sum 18 } 19 20 func main(){ 21 fmt.Println("plus函数返回的结果为:",plus()) 22 fmt.Println("------------------------") 23 fmt.Println("main函数中调用num1:",num1) 24 fmt.Println("main函数中调用num2:",num2) 25 }
以上代码输出的返回结果为:
plus函数内部调用num1: 10 plus函数内部调用num2: 20 plus函数返回的结果为: 30 ------------------------ main函数中调用num1: 10 main函数中调用num2: 20
Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。实例如下:
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 var ( 8 //定义全局变量num1,numu2 9 num1 int = 10 10 num2 int = 20 11 ) 12 func plus() int { 13 //内部的局部变量num1作用域要高于外部的num1.计算的时候会使用局部变量计算 14 num1 := 50 15 fmt.Println("plus函数内部调用num1:", num1) 16 fmt.Println("plus函数内部调用num2:", num2) 17 sum := num1 + num2 18 //和作为返回值返回 19 return sum 20 } 21 22 func main(){ 23 fmt.Println("plus函数返回的结果为:",plus()) 24 fmt.Println("------------------------") 25 fmt.Println("main函数中调用num1:",num1) 26 fmt.Println("main函数中调用num2:",num2) 27 }
以上代码输出的返回结果为:
plus函数内部调用num1: 50 plus函数内部调用num2: 20 plus函数返回的结果为: 70 ------------------------ main函数中调用num1: 10 main函数中调用num2: 20
形式参数
形式参数会作为函数的局部变量来使用。实例如下:
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 //声明全局变量a 8 var a int = 20 9 10 func main(){ 11 //局部变量 12 var a int = 10 13 var b int = 20 14 var c int = 0 15 16 fmt.Println("main函数中的a值:", a) 17 c = plus(a, b) 18 fmt.Println("main函数中的c值:", c) 19 20 } 21 22 func plus(a, b int) int { 23 //形参a,b的值来自于main函数中的局部变量的a,b两个赋值 24 fmt.Println("plus函数内部的a值:", a) 25 fmt.Println("plus函数内部的b值:", b) 26 return a + b 27 }
以上代码输出的返回结果为:
main函数中的a值: 10 plus函数内部的a值: 10 plus函数内部的b值: 20 main函数中的c值: 30
以上是关于Go的变量作用域的主要内容,如果未能解决你的问题,请参考以下文章