有人可以解释os.Exit()和panic()之间的关键差异,以及它们在实践中如何在Golang中使用?
首先,每当你有一个“如何在实践中使用”的问题,一个好的方法开始是
search的Go源代码(或任何足够大的Go代码库,真的),和
package docs的答案。
现在,os.Exit和panic是完全不同的。 panic
在程序或其部分已达到不可恢复状态时使用。
When
panic
is called,including implicitly for run-time errors such as indexing a slice out of bounds or failing a type assertion,it immediately stops execution of the current function and begins unwinding the stack of the goroutine,running any deferred functions along the way. If that unwinding reaches the top of the goroutine’s stack,the program dies.
os.Exit用于需要立即中止程序,没有恢复或运行延迟清理语句的可能性,并且还返回错误代码(其他程序可以用来报告发生了什么)。这在测试中很有用,当你已经知道在这一个测试失败后,另一个测试也会失败,所以你可能现在就退出。这也可以在您的程序完成它需要做的一切时使用,现在只需要退出,即打印帮助消息后。