码迷,mamicode.com
首页 > 其他好文 > 详细

Go的变量作用域

时间:2017-07-29 18:12:06      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:port   bsp   导出   div   报错   无法   color   输出   结果   

Go 语言变量作用域

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

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

  1. 函数内部定义的变量称为局部变量
  2. 函数外部定义的变量称为全局变量
  3. 函数定义中传的变量称为形式参数

 

局部变量

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

栗子~

 

 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的变量作用域

标签:port   bsp   导出   div   报错   无法   color   输出   结果   

原文地址:http://www.cnblogs.com/demon89/p/7256897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!