作者回复: func TestPanicVxExit(t *testing.T) { defer func() { if err := recover(); err != nil { fmt.Println("recovered from ", err) } }() fmt.Println("Start") panic(errors.New("Something wrong!")) } //output: Start recovered from Something wrong! 从输出你可以看出defer处理了panic中抛出的error
作者回复: 😊
作者回复: 你是什么操作系统?试试echo $?
作者回复: go不是采用异常机制的,而是采用错误机制 fun m3() error{ ... return errors.New("failed to run m3") } func m2() error{ err:=m3() if err!=nil{ return err } ... } 而panic和recovery也并不是如其他语言的exception那样使用的。
作者回复: recover一般适用于应用程序全局的未处理错误而不是某个函数。
作者回复: 返回的是panic的错误信息,在调用panic时可以传入错误信息。例如:panic(“something is wrong”)
作者回复: 使用代main的go程序,让后编译。执行编译后的二进制。在通过echo $?
作者回复: defer定义的范围对吗?粘贴一下你的代码吧