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

 

转载于:https://www.cnblogs.com/thinear/p/4306009.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值