我读过的大多数go代码都包含以下模式的频繁出现:
result1, err := failingOp1()
if err != nil {
return err
}
dependingResult, err := failingOp2(result1)
if err != nil {
return err
}
// do stuff with dependingResult在函数式编程中,我们有Either monad及其近亲(例如Scala的Try),它们允许我们组合失败的操作,而不需要不断地重复自己。
是否有一个go等价物可以帮助解算代码?
发布于 2017-03-24 13:02:57
进一步阅读,特别是this SO answer,似乎习惯go更喜欢在调用站点处理错误,而不是向上传播潜在的错误(这是一元方法所偏爱的)。
按照这一思路:
func wrapFailingOp1() ResultType {
result1, err := failingOp1()
if err != nil {
return defaultRTOrPanic()
}
return result1
}
func wrapFailingOp2(result1 ResultType) DependingResultType {
dependingResult, err := failingOp2(result1)
if err != nil {
return defaultDRTOrPanic()
}
return dependingResult
}
x := wrapFailingOp1()
y := wrapFailingOp2(x)https://stackoverflow.com/questions/42997668
复制相似问题