• 技术文章 >后端开发 >Golang

    go语言变量有几种作用域

    青灯夜游青灯夜游2023-01-16 11:10:44原创40

    go语言变量有2种作用域:1、局部变量,是在函数级别和块级别内声明的变量;局部变量只能在它们的块或函数中访问,已经声明的局部变量不能在同一块或函数中重新声明。2、全局变量,是在包级别声明的变量;全局变量在程序的整个生命周期中都可用,不能使用“:=”运算符声明全局变量。

    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

    变量声明的位置

    Go语言变量声明的位置有三种级别:

    变量位置示例

    package main
    
    import "fmt"
    
    var test = "test"  //在函数外,包级别变量
    
    func main() {
        a, b := 1, 2  //a和b,c在main函数内定义,函数级别变量
        c := sum(a, b)
        fmt.Println(c)
        fmt.Println(test)
    
        for i := 0; i < 10; i++ {   //i为for循环内定义,为隐式块级别变量
            var d = i + 1    //d在for的循环体内,以大括号{}括起来,为显式块级别变量
            fmt.Println(d)
        }
    
    }
    
    func sum(a, b int) int {   //函数参数a和b,在函数内定义,为函数级别变量
        fmt.Println(a)
        fmt.Println(b)
        nu := a + b
        return nu
    }

    变量作用域

    变量声明的位置决定了变量允许在什么地方被访问以及变量的声明周期。变量的可访问范围称为变量的作用域。Go语言中,变量的作用域分为两类:

    局部变量

    在函数级别和块级别内声明的变量为局部变量。局部变量有以下特征:

    示例:

    package main
    
    import "fmt"
    
    func main() {
        var a= "astrng"
        fmt.Println(a)
        for i := 0; i < 10; i++ {
            fmt.Println(i)
        }
        fmt.Println(i)
    }
    
    func testLocal() {
        fmt.Println(a)
    }

    这个代码编译时会报错:

    undefined: i
    undefined: a

    原因:

    i:为for循环体内的块级别的局部变量,在定义它的for循环体外访问,就会报undefined。

    a:为main函数级别的局部变量,在testLocal函数内无法访问,会报undefined错误。

    全局变量

    在包级别声明的变量为全局变量。全局变量有以下特征:

    package main
    
    import "fmt"
    
    var a = "astring"
    
    func main() {
        testGlobal()
    }
    
    func testGlobal() {
        fmt.Println(a)  //运行结果是,正确打印出a的值“astring”
    }

    局部变量和全局变量同名

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

    package main
    import "fmt"
    //声明全局变量
    var a float32 = 3.14
    func main() {
        //声明局部变量
        var a int = 3
        fmt.Printf("a = %d\n", a)
    }

    运行结果如下所示:

    a = 3

    Go语言是运行局部变量和全局变量同名,同名的变量在局部作用域范围,它将遮蔽外部作用域中的变量。

    package main
    
    import "fmt"
    
    var a = "globala"
    
    func main() {
        var a = "locala"
        fmt.Println(a)  //此处的a会遮蔽外面定义的a全局变量,输出locala
    }
    func testGlobal() {
      fmt.Println(a)  //此处是全局变量a,输出globala
    }

    1.png

    【相关推荐:Go视频教程编程教学

    以上就是go语言变量有几种作用域的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Golang go语言
    上一篇:go语言中list怎么删除元素 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • golang切片的长度与容量是什么• go语言中数组与切片有什么区别• go语言怎么比较字符串• golang怎么添加list元素• go语言怎么获取list长度
    1/1

    PHP中文网