panic
- pannic用于不可恢复得错误
- panic退出前会执行defer
panic vs os.Exit
- os.Exit退出时不会调用defer指定函数
- os.Exit退出时不输出当前调用栈信息
package panic_recover
import (
"errors"
"fmt"
"testing"
)
func TestPanicVsExit(t *testing.T){
fmt.Println("start")
defer func() {
fmt.Println("最后执行")
}()
panic(errors.New("something wrong"))
//os.Exit(-1)
}
recover
try catch
recover容易形成僵尸进程,与其让它成为僵尸进程,不如让它crash
func TestPanicVsExit(t *testing.T){
fmt.Println("start")
defer func() {
if err := recover();err != nil{
fmt.Printf("%s",err)
}
}()
panic(errors.New("something wrong"))
//os.Exit(-1)
}
本文探讨了在Go语言中,panic和os.Exit两种处理错误的方式。panic会导致程序停止并执行deferred函数,而os.Exit则直接退出不执行defer。通过示例代码展示了recover如何捕获panic,但使用recover可能会导致僵尸进程。文章建议在必要时选择让程序崩溃而不是维持僵尸状态。
1974

被折叠的 条评论
为什么被折叠?



