码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-02-28 20:06:19      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

一 基础用法

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

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 := 左边出现了非局部变量,生成与非局部变量同名的局部变量

 

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

标签:

原文地址:http://www.cnblogs.com/thinear/p/4306009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!