像打印一样恐慌,打印后中止执行 panicln like println,打印后中止执行
与断言相同吗?为什么他们会声称上述但却恐慌?我可以看到它导致相同的问题,但添加一个错误消息到它的结尾,很容易被滥用。我错过了什么吗?
答案 0 :(得分:16)
不,不是。恐慌就像“写然后中止”,而断言就像“测试,如果它是假的,写然后中止”。无论如何,他们无法阻止你做出类似断言的陈述。
答案 1 :(得分:2)
除了显而易见的,panic
在assert
时没有检查任何内容,在Go中你可以使用机制进行错误处理,即使发生恐慌也是如此。
如果一个包认为发生了无法从中恢复的事情恐慌。
但是,包用户,调用者(父级)可能要么检查或记录恐慌然后继续恐慌,要么抓住它以正确处理案例(例如,再试一次,或者再使用不同的包/功能)。
此外,断言中止不会调用析构函数或任何东西。虽然Go中的恐慌仍然会调用你defer
执行的函数,所以一切都被清除了。
因此,正如您所看到的,与断言相比,恐慌将允许各种清理任务。这就是你给出的引用指向的内容。
有关延迟,恐慌和恢复的详细信息,请参阅the official blog post on them。
答案 2 :(得分:1)
例如,在C中,assert()
仅在调试模式下中止执行。