golang作用域

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变量.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容