首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Go中是否有一种方法可以组成潜在的失败操作?

在Go中是否有一种方法可以组成潜在的失败操作?
EN

Stack Overflow用户
提问于 2017-03-24 10:55:21
回答 1查看 403关注 0票数 3

我读过的大多数go代码都包含以下模式的频繁出现:

代码语言:javascript
复制
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等价物可以帮助解算代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-24 13:02:57

进一步阅读,特别是this SO answer,似乎习惯go更喜欢在调用站点处理错误,而不是向上传播潜在的错误(这是一元方法所偏爱的)。

按照这一思路:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42997668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档