if-statement - golang if 初始化语句的范围为内部 if 块。为什么?
问题描述
我在我的代码中发现了一个错误
func receive() (err error) {
if v, err := produce(); err == nil {
fmt.Println("value: ", v)
}
return
}
错误永远不会从此函数返回,但我绝对确定它应该。
经过一些测试,我了解到err
在 if 语句中重新声明了这一点。不仅如此 - 所有变量总是在语句内部的短变量赋值中重新if
声明,尽管它们之前已声明过。
这是工作代码
func receive() (err error) {
v, err := produce()
if err == nil {
fmt.Println("value: ", v)
}
return
}
这是一个例子: https: //play.golang.org/p/1AWBsPbLiI1
好像if语句
//some code
if <init_statement>; <expression> {}
//more code
相当于
//some code
{
<init_statement>
if expression {}
}
//more code
所以,我的问题:
1)为什么不使用现有变量
2)为什么在文档/语言规范中没有提到这种范围
3)为什么编译器不说没有人返回值
解决方案
1)因为语言规范是这样说的。
2) 它是:
每个“if”、“for”和“switch”语句都被认为在其自己的隐式块中”
3)您确实在函数结束时返回。不要使用命名的返回值。
推荐阅读
- c++ - 如何使用 clang-tool 检测 SEXP 类型
- python - 如何保存来自 yfinance 回复的信息
- ms-access - 在 Microsoft Access VBA 中自动从 Google API 下载“街景”图像
- python - 如何为不同的分类列创建带有编码的管道?
- c - 如何使用 strtok 仅获取括号中的术语
- c - 删除 `else` 条件突然使代码工作,什么给出?
- python - 如何将值附加到多维 numpy 数组?
- javascript - JavaScript - 有效地创建具有位数的二进制字符串数组
- python - 新的 TensorFlow 2.4 GPU 问题
- python - 我可以从 Python 中的后台线程渲染 openCV 动画吗?