何时在Golang中使用os.Exit()和panic()?

有人可以解释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用于需要立即中止程序,没有恢复或运行延迟清理语句的可能性,并且还返回错误代码(其他程序可以用来报告发生了什么)。这在测试中很有用,当你已经知道在这一个测试失败后,另一个测试也会失败,所以你可能现在就退出。这也可以在您的程序完成它需要做的一切时使用,现在只需要退出,即打印帮助消息后。

大多数时候你不会使用panic(你应该返回一个错误),你几乎不需要os.Exit在一些情况下的测试和快速程序终止。

相关文章

程序目录结构 简单实现,用户登录后返回一个jwt的token,下次请求带上token请求用户信息接口并返回信息...
本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简...
简介 默克尔树(MerkleTree)是一种典型的二叉树结构,其主要特点为: 最下面的叶节点包含存储数据或其...
接下来学习并发编程, 并发编程是go语言最有特色的地方, go对并发编程是原生支持. goroutine是go中最近本...
先普及一下, 什么是广度优先搜索 广度优先搜索类似于树的层次遍历。从图中的某一顶点出发,遍历每一个顶...
第一天: 接口的定义和实现 第二天: 一. go语言是面向接口编程. 在学习继承的时候说过, go语言只有封装,...