美文网首页
golang作用域

golang作用域

作者: YongHao | 来源:发表于2016-10-31 16:37 被阅读94次

    golang的:=操作符虽然方便,但在作用域上也带来了潜在的疑惑和危险.


    大家看看这段代码能否准确的说出输出语句是什么?

    package main
    
    import "fmt"
    
    var a int
    
    func funca() {
        a, b := 12, 3
        fmt.Println("a is ", a, " b is ", b)
    }
    func funcb() {
        fmt.Println("a is ", a)
    }
    func main() {
        funca()
        funcb()
    
        c := 8
        fmt.Println("c is ", c)
        c, d := 9, 10
        fmt.Println("c is ", c, " d is ", d)
    }
    

    是的,输出的是

    a is  12  b is  3
    a is  0
    c is  8
    c is  9  d is  10
    

    已经定义好的变量在同一作用域里, 在多赋值(:=)时, :=的作用只是赋值, 就像main函数里对C的作用一样.

    但是在该作用域里并没有定义时, := 会是创建新变量. 如funca就会创建局部变量a,覆盖掉全局的a变量.

    相关文章

      网友评论

          本文标题:golang作用域

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