用Go语言进行链式调用,如何实现在其中一个调用报错后直接返回,不执行后面的调用?

比如,v := a(x).b(y).c(z),假如b(y)出错了,如何不执行实现不运行c(z)直接返回?
使用panic如果不recover整个程序就崩掉了,如果在b(y)里面recover还是要运行c(z),如果在外面recover就不优美了。

阅读 5.9k
2 个回答

看起来你需要 PHP 7 或者 Swift 的 Null coalescing operator 呢。当然了,这种东西 Haskell 也是良好支持的。

新手上路,请多包涵

其实 代码库里面用panic,但是不要用recover,然后在package main里面用recover就可以了。
在你写的链式调用的外部

defer func (){if err := recover(); err != nil { ... } }()

recover只在应用层的上层使用,而不要再底层使用,是不是要好一点呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题