知识卡片

具名返回值的变量遮蔽陷阱

专业/工作 · 482.a.1

内容

Go允许给返回值命名(如func f() (err error)),这样函数体内任何地方赋值给这个名字都会更新最终的返回值,配合不带值的return语句尤其方便。为了避免这个坑,需要在给具名返回值赋值时用=而不是:=,必要时提前用var单独声明一个变量。发散:这提醒我们:=不只是”赋值”,它同时隐含”在当前作用域声明一个新变量”,一旦作用域嵌套变化,同一个变量名可能悄悄指向。

参考来源

- 位置:《Go语言程序设计》第1章《5个例子》(源文件:_epub-src/OEBPS/text00039.html) - 结论依据:原文在该章节围绕“Go允许给返回值命名(如`funcf()(errerror)`),这样函数体内任何地方赋值给这个名字都会更新最…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:到分号。那是因为编译器会自动在以标识符、数字字面量、字母字面量、字符串字面量、特定的关键字( break 、 continue 、 fallthrough 和 return )、增减操作符( ++ 或者 -- )或者是一个右括号、右方括号和右大括号 (即) 、 ] 、 } )结束的非空行的末尾自动加上分号。 有两个地方必须使用分号,即当我…