[golang基础] 局部变量初始化:=

一 基础用法

操作 := 只能用于方法内部, 声明并初始化新的变量

v := 3

但是不能用于已声明变量赋值, 下面的做法编译器会报错误"no new variables on left side of :="

var v int = 0
v := 1

通过错误可以了解到, := 操作左边必须要有新变量, 那么多个变量初始化只需要满足左边至少有一个新变量即可

err := errors.New("error1")
ret, err := test_fun()

这种做法是合法的, 因为ret是新变量, 这样就很方便了, 因为go方法经常会返回错误err, 那么在同一个方法内

只需要声明一个err变量即可

 

二 :=陷阱

由于:=只能用于局部变量, 那么下面的代码会发生什么情况呢?

var out int = 1

func test() {
    out, in := 2, 3      
}

变量out的作用域包含test(), 但是实际上:= 操作会新创建新的局部变量out, 谨记!!!

 

那么类似情况: 

func test1() {
    v := 1
    {
        v := 1
    }    
}

编译器会不会报"no new variables on left side of :="? 编译器没有报错,所以两个v是不同的变量

在go中 if for switch都可能产生特殊作用域的局部变量,在if for switch中有变量赋值时需要注意 :=

结论:

1 := 左边出现了同层作用域的局部变量,只是赋值操作,没有新生成局部变量

2 := 左边出现了上层作用域的局部变量,新生成同名局部变量并赋值

3 := 左边出现了非局部变量,生成与非局部变量同名的局部变量

 

posted @ 2015-02-28 17:58  thinear  阅读(1384)  评论(0编辑  收藏  举报