zoukankan      html  css  js  c++  java
  • Go的变量作用域

    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
  • 相关阅读:
    基于 HTML5 Canvas 的交互式地铁线路图
    基于HTML5的WebGL实现json和echarts图表展现在同一个界面
    基于HTML5和WebGL的3D网络拓扑结构图
    JavaScript基础:创建对象
    使用ksoap2报java.io.EOFException异常问题解决方法
    Silverlight之我见
    今年的IT大趋势是虚拟现实
    Apache服务器部署ASP.NET网站
    Bootstrap优秀网站:乐窝网
    [转载]C#读取Excel几种方法的体会
  • 原文地址:https://www.cnblogs.com/demon89/p/7256897.html
Copyright © 2011-2022 走看看