A 函数调用 B 函数,有没有可能在 B 不主动返回 error 的情况下,知道 B 执行过程中是否遇到了 error?

2021 年 2 月 6 日
 zhoudaiyu

比如 B 的定义是 func b() {} 不返回 error 。

3453 次点击
所在节点    Go 编程语言
15 条回复
icebay
2021 年 2 月 6 日
panic 和 recovery 满足吗?
zhoudaiyu
2021 年 2 月 6 日
@IceBay #1 老哥怎么说 刚开始用 Go 还不太懂 panic 和 error 的关系😂
treemonster
2021 年 2 月 6 日
比如用 chan?
QingXuJiaZhi
2021 年 2 月 6 日
@zhoudaiyu 如果在 B 里发生 error 并且 panic, 那么在 A 里就可以通过 recover 来捕获 panic
alazysun
2021 年 2 月 6 日
go panic
c++ throw
Dongxiem
2021 年 2 月 7 日
panic 能够改变程序的控制流,调用 panic 后会立刻停止执行当前函数的剩余代码,并在当前 Goroutine 中递归执行调用方的 defer ;

recover 可以中止 panic 造成的程序崩溃,它是一个只能在 defer 中发挥作用的函数,在其他作用域中调用不会发挥作用;

所以,如果按照楼主的意思,可以了解一下 Defer+Panic+Recover 这一套组合,看能不能满足需求。
scnace
2021 年 2 月 7 日
这要看是单纯 func 还是 method 了,func 的话只能 panic 了(但是不推荐 换我的话可能会再 wrap 一次返回 error
neoblackcap
2021 年 2 月 7 日
虽然 panic 是可以做到,但是这不是应该通用化的做法。
最好还是有错就返回 error,如果有可能的话,请改这个函数接口
FinnBai
2021 年 2 月 7 日
是不想写 `if err != nil` 了吗...可以看看这片博客: https://blog.golang.org/errors-are-values
lewis89
2021 年 2 月 7 日
@Dongxiem #6 那其实就是 try-catch-finally... 结果整半天 还是回到 try catch finally 这个流程上面来了
bfdh
2021 年 2 月 7 日
难道不先定义下什么是 error 吗?
dongtingyue
2021 年 2 月 7 日
大哥不要老想用另一种语言的方式来写一种语言好吧。。。
你咋不说能不能不定义变量类型,变量可以直接用+或者.拼接。
cloverzrg2
2021 年 2 月 7 日
不主动返回 error 是指?
B 遇到错误继续执行?
Dongxiem
2021 年 2 月 7 日
@lewis89 可能高级编程语言的设计大体上都是相通的吧。
guo4224
2021 年 2 月 7 日
errno??

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/751904

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX