3 回答
TA贡献1871条经验 获得超13个赞
正如你已经知道的:
value, err = myFunc(value)
是通过返回内置error
类型来处理异常的惯用方法。在某种程度上,您可以将其与已检查的异常进行比较,我猜。但是,在您的情况下,未能生成新goroutine
的更像是运行时异常。这些如何golang手柄是利用恐慌。您可以使用内置recover()
函数在代码中处理它们,该函数将尝试重新获得对执行流程的控制。panic
否则,它将向上堆栈直到它使程序崩溃。
请注意,recover()
必须在正在被defer
编辑的函数中调用,这些函数被推入一个列表中,并且总是在它们被延迟的函数的末尾被调用 - 所以即使panic
发生它们也会被调用,允许您打电话recover()
。如果您只是尝试recover()
在函数末尾(或在您恐慌子函数之后的任何地方)调用,则执行将永远不会到达它。如果您可以处理恐慌(recover()
不返回 an err
)以便您的程序实际上可以继续,它将从引发恐慌的函数所在的点开始执行。
认为上面的博客文章就足够了,但如果您需要更多示例,请在此处发表评论。
此外,您的系统很可能会受到 RAM 内存而不是 CPU 的限制。
TA贡献1876条经验 获得超6个赞
goroutine 创建(或多或少)只是内存分配。您通常无法捕获内存分配异常,goroutines 也是如此。
如果您的程序内存不足,除了退出和重新启动之外,您通常无能为力。
TA贡献1155条经验 获得超0个赞
如果您使用的函数返回错误的 go 例程,您可以改为调用匿名函数并处理匿名函数中的错误。
go func() {
value, err := myFunc()
}()
- 3 回答
- 0 关注
- 264 浏览
添加回答
举报