err返回值
没有获取到,求解答!
package main
import "fmt"
func main() {
fmt.Println(Parse())
}
func Parse() error {
var err error
defer func() {
//选择性的recover
switch p := recover(); p {
case nil:
case "what":
err = fmt.Errorf("internal error")
fmt.Println(err)
default:
panic(p)
}
}()
panic("what")
return err
}
输出值:
internal error
<nil>
有疑问加站长微信联系(非本文作者)

都panic 了,你去哪拿返回值啊
我recover捕获到了panic
return、defer执行顺序应该是:
这样的步骤吧,如果想赋值可以这样
``` package main
import "fmt"
func main() { fmt.Println(Parse()) }
func Parse()(err error){ defer func() { //选择性的recover switch p := recover(); p { case nil: case "what": err = fmt.Errorf("internal error") fmt.Println(err) default: panic(p)
} ```
具体的可以看这篇博文:https://my.oschina.net/henrylee2cn/blog/505535
对啊,panic然后走到defer 了,不能再去return 了
谢了。正在理解你写的
客气。具体到这段代码,第一步return的赋值应该因为panic跳过了(即便不跳过也不会赋值成功),直接执行了第二步的defer语句
我看了你分享的连接,初步理解到了