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

thinear · · 5889 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

一 基础用法

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

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

 


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:thinear

查看原文:[golang基础] 局部变量初始化:=

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5889 次点击  
加入收藏 微博
1 回复  |  直到 2000-01-01 00:00:00
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传