美文网首页
go作用域

go作用域

作者: seven_son | 来源:发表于2017-08-15 19:41 被阅读30次

    词法作用域

    var x = 42
    
    func main() {
        fmt.Println(x)
        foo()
    }
    
    func foo() {
        fmt.Println(x)
    }
    
    • 函数作用域
      类似闭包,因为x是全局变量
    var x = 0 
    func increment() int {
        x++
        return x
    }
    
    func main() {
        fmt.Println(increment())
        fmt.Println(increment())
    }
    

    闭包:

    func wrapper() func() int {
        x := 0
        return func() int {
            x++
            return x
        }
    }
    

    他们之间有相似之处,因为在上面的代码中,x本来就是全局变量,所以x一直存在,一直可以调用,但是下面的代码中
    x要想一直存在变量中,所以x必须被别人引用,且将引用x的函数返回到全局变量中,这样就形成了闭包

    • 包的作用域
      同一包中两个文件,之间调用,确定要在一起编译时可以调用的

    • 代码块的作用域
      {}代表变量的作用域

        func main() {
        x := 1
        {
            y := 2
        }
        fmt.Println(x)
        fmt.Println(y)
    }
    

    相关文章

      网友评论

          本文标题:go作用域

          本文链接:https://www.haomeiwen.com/subject/hpgjlxtx.html