将返回的错误分配给下划线

Ram*_*ino 3 error-handling go pq

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

在代码中,我碰到这个:

go func() {
    select {
    case <-done:
        _ = cn.cancel()
        finished <- struct{}{}
    case <-finished:
    }
}()
Run Code Online (Sandbox Code Playgroud)

取消功能如下:

func (cn *conn) cancel() error
Run Code Online (Sandbox Code Playgroud)

据我所知,下划线不被用作关于类型的静态断言(因此编译器不会评估任何副作用,就我所见(如本例所示))并且它不是'作为作者可能想要丢弃它的第二个参数.

总结:为什么要将取消函数的结果(错误)分配给下划线?

pet*_*rSO 5

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


第一条规则:检查错误.


func (cn *conn) cancel() error
Run Code Online (Sandbox Code Playgroud)

如果我写

cn.cancel()
Run Code Online (Sandbox Code Playgroud)

我忘记检查错误还是我决定丢弃错误值?

但是,如果我写的话

_ = cn.cancel()
Run Code Online (Sandbox Code Playgroud)

我没有忘记检查错误,我确实决定丢弃错误值.


Go编程语言规范

空白标识符

空白标识符由下划线字符_表示.它充当匿名占位符而不是常规(非空)标识符,并且在声明,操作数和赋值中具有特殊含义.

分配

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