Go 将返回的错误指定给下划线

Go 将返回的错误指定给下划线,go,error-handling,pq,Go,Error Handling,Pq,我一直在读github.com/lib/pq上的一些Golang代码,它提供了与postgres数据库交互的驱动程序 在我遇到的代码中: 据我所知,下划线并没有被用作关于类型的静态断言(因此编译器不会评估我所看到的任何副作用()),它也不是作者想要放弃它的第二个参数 总而言之:为什么要将取消函数的结果(错误)指定给下划线?空白标识符“\ux”是一个特殊的匿名标识符。在赋值中使用时(如本例),它提供了一种显式忽略右侧值的方法。因此,开发人员决定忽略/放弃此方法调用返回的错误 他们这样做的几个原因(

我一直在读github.com/lib/pq上的一些Golang代码,它提供了与postgres数据库交互的驱动程序

在我遇到的代码中:

据我所知,下划线并没有被用作关于类型的静态断言(因此编译器不会评估我所看到的任何副作用()),它也不是作者想要放弃它的第二个参数


总而言之:为什么要将取消函数的结果(错误)指定给下划线?

空白标识符“\ux”是一个特殊的匿名标识符。在赋值中使用时(如本例),它提供了一种显式忽略右侧值的方法。因此,开发人员决定忽略/放弃此方法调用返回的错误

他们这样做的几个原因(基于快速浏览方法调用和上下文,我猜是3或4):

  • 方法调用保证在此上下文中成功
  • 方法调用中已充分处理错误;没有理由再处理它
  • 错误并不重要(例如,相关过程无论如何都将结束,结果将与方法调用成功无误时相同)
  • 开发人员急于让某些东西工作起来,为了节省时间而忽略了错误,然后没有回来处理错误

  • 代码必须是正确的。为了确保代码正确,代码必须可读


    围棋的第一条规则:检查错误


    如果我写

    cn.cancel()
    
    我是忘记检查错误还是决定放弃错误值

    然而,如果我写

    _ = cn.cancel()
    
    我没有忘记检查错误,我确实决定放弃错误值


    空白标识符

    空白标识符由下划线字符\表示。信息技术 用作匿名占位符,而不是常规占位符(非空) 标识符,在声明中具有特殊含义,如操作数,以及 在作业中

    任务

    空白标识符提供了一种忽略右侧值的方法 在任务中:


    除了明确表示要放弃错误外,
    \uu=cancel()
    cancel()
    之间没有区别。请您对您的否决票发表意见,以便我尝试改进,或者从错误中吸取教训?
    func (cn *conn) cancel() error
    
    cn.cancel()
    
    _ = cn.cancel()