3 回答

TA贡献1803条经验 获得超6个赞
有什么好方法可以让 funcA、funcB 和 funcC 报告错误并停止该链?
不幸的是,不,您的问题没有好的解决方案。变通方法非常复杂(添加错误通道等),以至于成本超过了收益。
方法链不是 Go 中的习惯用法(至少对于可能出错的方法来说不是)。这不是因为方法链有什么特别的错误,而是返回错误而不是恐慌的习惯用法的结果。其他答案是解决方法,但没有一个是惯用的。
我可以问一下,在 Go 中链接方法不是因为我们在 Go 中所做的返回错误的后果,还是更普遍的是多个方法返回的结果?
好问题,但这不是因为 Go 支持多次返回。Python 支持多个返回,Java 也可以通过一个Tuple<T1, T2>
类;方法链在两种语言中都很常见。这些语言可以逃脱它的原因是因为它们惯用地通过异常来传达错误。异常立即停止方法链并跳转到相关的异常处理程序。这是 Go 开发人员通过选择返回错误来特别试图避免的行为。

TA贡献1772条经验 获得超6个赞
如果您可以控制代码并且函数签名相同,您可以编写如下内容:
func ChainCall(fns ...func() (*Chain, error)) (err error) {
for _, fn := range fns {
if _, err = fn(); err != nil {
break
}
}
return
}
- 3 回答
- 0 关注
- 236 浏览
添加回答
举报