文章目录
错误和异常是两个不同的概念,非常容易混淆。很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误。从表面上看,一切皆错误的思路更简单,而异常的引入仅仅增加了额外的复杂度。但事实并非如此。众所周知,Golang遵循“少即是多”的设计哲学,追求简洁优雅,就是说如果异常价值不大,就不会将异常加入到语言特性中。Golang开发中有panic(异常)和error(错误)。其中error代表可预见的错误,panic代表不可预见的异常。
panic
能够改变程序的控制流,调用panic
后会立刻停止执行当前函数的剩余代码,并在当前Goroutine
中递归执行调用方的defer
;recover
可以中止panic
造成的程序崩溃。它是一个只能在defer
中发挥作用的函数,在其他作用域中调用不会发挥作用;
需要注意的是,在实际开发中应该尽可能地使用error
,而不是使用panic
和recover
。只有当程序不能继续运行的时候,才应该使用panic
和