详解Go语言变量作用域

时间:2021-05-22

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

Go 语言中变量可以在三个地方声明:

  • 函数内定义的变量称为局部变量
  • 函数外定义的变量称为全局变量
  • 函数定义中的变量称为形式参数

接下来让我们具体了解局部变量、全局变量和形式参数。

局部变量

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

以下实例中 main() 函数使用了局部变量 a, b, c:

package mainimport "fmt"func main() {var a, b, c inta = 10b = 20c = a + bfmt.Printf ("结果: a = %d, b = %d and c = %d\n", a, b, c)}

以上实例执行输出结果为:

结果: a = 10, b = 20 and c = 30

全局变量

在函数体外声明的变量称之为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用。

全局变量可以在任何函数中使用,以下实例演示了如何使用全局变量:

package mainimport "fmt"var g intfunc main() {var a, b inta = 10b = 20g = a + bfmt.Printf("结果: a = %d, b = %d and g = %d\n", a, b, g)}

以上实例执行输出结果为:

结果: a = 10, b = 20 and g = 30

Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。实例如下:

package mainimport "fmt"var g int = 20func main() {var g int = 10fmt.Printf ("结果: g = %d\n", g)}

以上实例执行输出结果为:

结果: g = 10

形式参数

形式参数会作为函数的局部变量来使用。实例如下:

package mainimport "fmt"var a int = 20;func main() {var a int = 10var b int = 20var c int = 0fmt.Printf("main()函数中 a = %d\n", a);c = sum( a, b);fmt.Printf("main()函数中 c = %d\n", c);}func sum(a, b int) int {fmt.Printf("sum() 函数中 a = %d\n", a);fmt.Printf("sum() 函数中 b = %d\n", b);return a + b;}

以上实例执行输出结果为:

main()函数中 a = 10
sum() 函数中 a = 10
sum() 函数中 b = 20
main()函数中 c = 30

初始化局部和全局变量

不同类型的局部和全局变量默认值为:

数据类型 初始化默认值 int 0 float32 0 pointer nil

形参使用,比较 sum 函数中的 a 和 main 函数中的 a,sum 函数中虽然加了 1,但是 main 中还是原值 10:

package mainimport "fmt"var a int = 20func main() {var a int = 10var b int = 20var c int = 0fmt.Printf("main()函数中 a = %d\n", a)c = sum(a, b)fmt.Printf("main()函数中 a = %d\n", a)fmt.Printf("main()函数中 c = %d\n", c)}func sum(a, b int) int {a = a + 1fmt.Printf("sum() 函数中 a = %d\n", a)fmt.Printf("sum() 函数中 b = %d\n", b)return a + b}

输出为:

main()函数中 a = 10
sum() 函数中 a = 11
sum() 函数中 b = 20
main()函数中 a = 10
main()函数中 c = 31

以上就是详解Go 语言变量作用域的详细内容,更多关于Go 语言变量作用域的资料请关注其它相关文章!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章