Go基础编程:作用域

来源:互联网 发布:win10网络图标红叉 编辑:程序博客网 时间:2024/06/16 15:54

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

局部变量

在函数体内声明的变量、参数和返回值变量就是局部变量,它们的作用域只在函数体内:

func test(a, b int) {    var c int    a, b, c = 1, 2, 3    fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)}func main() {    //a, b, c = 1, 2, 3 //err, a, b, c不属于此作用域    {        var i int        i = 10        fmt.Printf("i = %d\n", i)    }    //i = 20 //err, i不属于此作用域    if a := 3; a == 3 {        fmt.Println("a = ", a)    }    //a = 4 //a在能if内部使用}

全局变量

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

var a int //全局变量的声明func test() {    fmt.Printf("test a = %d\n", a)}func main() {    a = 10    fmt.Printf("main a = %d\n", a) //main a = 10    test() //test a = 10}

不同作用域同名变量

在不同作用域可以声明同名的变量,其访问原则为:在同一个作用域内,就近原则访问最近的变量,如果此作用域没有此变量声明,则访问全局变量,如果全局变量也没有,则报错。

var a int //全局变量的声明func test01(a float32) {    fmt.Printf("a type = %T\n", a) //a type = float32}func main() {    fmt.Printf("a type = %T\n", a) //a type = int, 说明使用全局变量的a    var a uint8 //局部变量声明    {        var a float64                  //局部变量声明        fmt.Printf("a type = %T\n", a) //a type = float64    }    fmt.Printf("a type = %T\n", a) //a type = uint8    test01(3.14)    test02()}func test02() {    fmt.Printf("a type = %T\n", a) //a type = int}