
比如 B 的定义是 func b() {} 不返回 error 。
1 icebay 2021-02-06 22:22:25 +08:00 panic 和 recovery 满足吗? |
2 zhoudaiyu OP PRO @IceBay #1 老哥怎么说 刚开始用 Go 还不太懂 panic 和 error 的关系 |
3 treemonster 2021-02-06 22:58:34 +08:00 via Android 比如用 chan? |
4 cmdOptionKana 2021-02-06 23:02:07 +08:00 @zhoudaiyu 如果在 B 里发生 error 并且 panic, 那么在 A 里就可以通过 recover 来捕获 panic |
5 alazysun 2021-02-06 23:54:09 +08:00 go panic c++ throw |
6 Dongxiem 2021-02-07 00:46:45 +08:00 panic 能够改变程序的控制流,调用 panic 后会立刻停止执行当前函数的剩余代码,并在当前 Goroutine 中递归执行调用方的 defer ; recover 可以中止 panic 造成的程序崩溃,它是一个只能在 defer 中发挥作用的函数,在其他作用域中调用不会发挥作用; 所以,如果按照楼主的意思,可以了解一下 Defer+Panic+Recover 这一套组合,看能不能满足需求。 |
7 scnace 2021-02-07 01:41:48 +08:00 via Android 这要看是单纯 func 还是 method 了,func 的话只能 panic 了(但是不推荐 换我的话可能会再 wrap 一次返回 error |
8 neoblackcap 2021-02-07 01:44:49 +08:00 虽然 panic 是可以做到,但是这不是应该通用化的做法。 最好还是有错就返回 error,如果有可能的话,请改这个函数接口 |
9 baiyi 2021-02-07 09:10:08 +08:00 是不想写 `if err != nil` 了吗...可以看看这片博客: https://blog.golang.org/errors-are-values |
10 lewis89 2021-02-07 09:11:00 +08:00 @Dongxiem #6 那其实就是 try-catch-finally... 结果整半天 还是回到 try catch finally 这个流程上面来了 |
11 bfdh 2021-02-07 09:45:22 +08:00 难道不先定义下什么是 error 吗? |
12 dongtingyue 2021-02-07 10:14:21 +08:00 大哥不要老想用另一种语言的方式来写一种语言好吧。。。 你咋不说能不能不定义变量类型,变量可以直接用+或者.拼接。 |
13 cloverzrg2 2021-02-07 10:32:17 +08:00 不主动返回 error 是指? B 遇到错误继续执行? |
15 guo4224 2021-02-07 19:42:19 +08:00 errno?? |