Go 将返回的错误指定给下划线
我一直在读github.com/lib/pq上的一些Golang代码,它提供了与postgres数据库交互的驱动程序 在我遇到的代码中: 据我所知,下划线并没有被用作关于类型的静态断言(因此编译器不会评估我所看到的任何副作用()),它也不是作者想要放弃它的第二个参数Go 将返回的错误指定给下划线,go,error-handling,pq,Go,Error Handling,Pq,我一直在读github.com/lib/pq上的一些Golang代码,它提供了与postgres数据库交互的驱动程序 在我遇到的代码中: 据我所知,下划线并没有被用作关于类型的静态断言(因此编译器不会评估我所看到的任何副作用()),它也不是作者想要放弃它的第二个参数 总而言之:为什么要将取消函数的结果(错误)指定给下划线?空白标识符“\ux”是一个特殊的匿名标识符。在赋值中使用时(如本例),它提供了一种显式忽略右侧值的方法。因此,开发人员决定忽略/放弃此方法调用返回的错误 他们这样做的几个原因(
总而言之:为什么要将取消函数的结果(错误)指定给下划线?空白标识符“\ux”是一个特殊的匿名标识符。在赋值中使用时(如本例),它提供了一种显式忽略右侧值的方法。因此,开发人员决定忽略/放弃此方法调用返回的错误 他们这样做的几个原因(基于快速浏览方法调用和上下文,我猜是3或4):
代码必须是正确的。为了确保代码正确,代码必须可读
围棋的第一条规则:检查错误
如果我写
cn.cancel()
我是忘记检查错误还是决定放弃错误值
然而,如果我写
_ = cn.cancel()
我没有忘记检查错误,我确实决定放弃错误值
空白标识符 空白标识符由下划线字符\表示。信息技术 用作匿名占位符,而不是常规占位符(非空) 标识符,在声明中具有特殊含义,如操作数,以及 在作业中 任务 空白标识符提供了一种忽略右侧值的方法 在任务中:
除了明确表示要放弃错误外,
\uu=cancel()
和cancel()
之间没有区别。请您对您的否决票发表意见,以便我尝试改进,或者从错误中吸取教训?
func (cn *conn) cancel() error
cn.cancel()
_ = cn.cancel()