在golang中,当我导入一个模块时,它的init()被执行(我假设在main()之前?),这个函数中可能会产生一些错误。我如何捕获这些错误并在我自己的代码中处理它们?
正如你所知,Go 中的错误是返回值。由于 init() 不返回任何内容,因此如果出现任何问题,唯一的选择是在 init 中恐慌()。
可以说,在 init 上发生恐慌的包设计得不是很好,尽管这可能有有效的用例。
在这种情况下,recover() 不是一个选项,因为 init 在 main 之前运行。因此,如果您无法编辑有问题的包,那么您就不走运了。
这就是为什么应该谨慎使用恐慌和恢复的原因之一,只有在字面上“恐慌”有意义的情况下才应使用。
@twotwotwo 贡献了以下来自“ effective Go”的引用来描述这一点(对于 init 情况):
如果图书馆确实无法自行设置,可以这么说,恐慌可能是合理的
所以:如果你的 init 函数需要报告错误,那么问问自己该代码是否真的属于 init 或最好保存在其他地方。如果确实必须进行 init,请考虑在包内设置一个错误标志,并记录任何客户端都必须检查该错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)