但是它有print 和 println可以
像 print 一样恐慌,在打印后中止执行
panicln 像 println,在打印后中止执行
这和断言不是一回事吗?为什么他们会声称上述内容却感到恐慌?我可以看到它导致了同样的问题,但是在它的末尾添加了一个错误消息,这很容易被滥用。我错过了什么吗?
但是它有print 和 println可以
像 print 一样恐慌,在打印后中止执行
panicln 像 println,在打印后中止执行
这和断言不是一回事吗?为什么他们会声称上述内容却感到恐慌?我可以看到它导致了同样的问题,但是在它的末尾添加了一个错误消息,这很容易被滥用。我错过了什么吗?
不,这不对。恐慌就像“写然后中止”,而断言就像“测试,如果它是假的,写然后中止”。无论如何,他们无法阻止您做出类似断言的声明。
除了显而易见的,它panic
不会检查任何东西assert
,在 Go 中你可以使用机制来处理错误,即使发生恐慌。
如果一个包认为发生了一些无法从中恢复的事情,就会发生恐慌。
但是,包用户、调用者(父级别)可能想要检查或记录恐慌,然后继续恐慌,或者抓住它以正确处理这种情况(例如,再试一次或然后使用不同的包/函数)。
此外,断言中止不会调用析构函数或任何东西。尽管 Go 中的 panic 仍然会调用你defer
将要执行的函数,所以一切都被清理干净了。
因此,如您所见,与断言相比,恐慌将允许执行各种清理任务。这就是你给出的报价所指向的。
有关延迟、恐慌和恢复的详细信息,请参阅有关它们的官方博客文章。
一方面,在 C 语言中,assert()
只有在调试模式下才会中止执行。