将返回错误分配给下划线
Assigning the returning error to an underscore
我一直在阅读来自 github 的一些 Golang 代码。com/lib/pq 它提供了与 postgres 数据库交互的驱动程序。
我遇到的代码中 this:
go func() {
select {
case <-done:
_ = cn.cancel()
finished <- struct{}{}
case <-finished:
}
}()
取消函数looks like:
func (cn *conn) cancel() error
据我所知,下划线并未用作关于类型的静态断言(因此据我所知,编译器不会评估任何副作用(as in this example )) 并且它不是第二个参数,作者可能希望将其丢弃。
总结:为什么将取消函数的结果(错误)分配给下划线?
空白标识符“_”是一种特殊的匿名标识符。当在赋值中使用时,就像这种情况,它提供了一种 显式 忽略右侧值的方法。因此,开发人员已决定 ignore/discard 此方法调用返回的错误。
他们可能这样做的几个原因(基于对方法调用和上下文的快速浏览,我猜是 3 或 4):
- 方法调用保证在此上下文中成功。
- 错误已在方法调用中得到充分处理;没有理由再处理它。
- 错误无关紧要(例如相关过程无论如何都会结束,结果将与方法调用成功且没有错误相同)。
- 开发人员急于让某些东西正常工作,为了节省时间忽略了错误,然后未能回来处理错误。
代码必须正确。为确保代码正确,代码必须可读。
Go 的第一条规则:检查错误。
func (cn *conn) cancel() error
如果我写
cn.cancel()
我是忘记检查错误还是决定放弃错误值?
但是,如果我写
_ = cn.cancel()
我没有忘记检查错误,我确实决定放弃错误值。
The Go Programming Language Specification
Blank identifier
The blank identifier is represented by the underscore character _. It
serves as an anonymous placeholder instead of a regular (non-blank)
identifier and has special meaning in declarations, as an operand, and
in assignments.
Assignments
The blank identifier provides a way to ignore right-hand side values
in an assignment:
我一直在阅读来自 github 的一些 Golang 代码。com/lib/pq 它提供了与 postgres 数据库交互的驱动程序。
我遇到的代码中 this:
go func() {
select {
case <-done:
_ = cn.cancel()
finished <- struct{}{}
case <-finished:
}
}()
取消函数looks like:
func (cn *conn) cancel() error
据我所知,下划线并未用作关于类型的静态断言(因此据我所知,编译器不会评估任何副作用(as in this example )) 并且它不是第二个参数,作者可能希望将其丢弃。
总结:为什么将取消函数的结果(错误)分配给下划线?
空白标识符“_”是一种特殊的匿名标识符。当在赋值中使用时,就像这种情况,它提供了一种 显式 忽略右侧值的方法。因此,开发人员已决定 ignore/discard 此方法调用返回的错误。
他们可能这样做的几个原因(基于对方法调用和上下文的快速浏览,我猜是 3 或 4):
- 方法调用保证在此上下文中成功。
- 错误已在方法调用中得到充分处理;没有理由再处理它。
- 错误无关紧要(例如相关过程无论如何都会结束,结果将与方法调用成功且没有错误相同)。
- 开发人员急于让某些东西正常工作,为了节省时间忽略了错误,然后未能回来处理错误。
代码必须正确。为确保代码正确,代码必须可读。
Go 的第一条规则:检查错误。
func (cn *conn) cancel() error
如果我写
cn.cancel()
我是忘记检查错误还是决定放弃错误值?
但是,如果我写
_ = cn.cancel()
我没有忘记检查错误,我确实决定放弃错误值。
The Go Programming Language Specification
Blank identifier
The blank identifier is represented by the underscore character _. It serves as an anonymous placeholder instead of a regular (non-blank) identifier and has special meaning in declarations, as an operand, and in assignments.
Assignments
The blank identifier provides a way to ignore right-hand side values in an assignment: