por*_*ion -6 scope if-statement go
我在代码中发现了一个错误
func receive() (err error) {
if v, err := produce(); err == nil {
fmt.Println("value: ", v)
}
return
}
Run Code Online (Sandbox Code Playgroud)
错误永远不会从此函数返回,但我绝对相信它应该.
经过一些测试后,我明白err在if语句中重新声明了这一点.更重要的是 - 所有变量总是在短变量赋值内部if声明中重新声明,尽管它们之前被声明过.
这是工作代码
func receive() (err error) {
v, err := produce()
if err == nil {
fmt.Println("value: ", v)
}
return
}
Run Code Online (Sandbox Code Playgroud)
这是一个例子:https://play.golang.org/p/1AWBsPbLiI1
好像if语句
//some code
if <init_statement>; <expression> {}
//more code
Run Code Online (Sandbox Code Playgroud)
相当于
//some code
{
<init_statement>
if expression {}
}
//more code
Run Code Online (Sandbox Code Playgroud)
所以,我的问题:
1)为什么不使用现有变量
2)为什么在文档/语言规范中没有提到这样的范围
3)为什么编译器不会说没有人返回值
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |