В чем разница между паникой и утверждением? - PullRequest
11 голосов
/ 30 января 2010

Go не предоставляет подтверждений. Они, несомненно, удобны, но наш опыт показывает, что программисты используют их в качестве опоры, чтобы не думать о правильной обработке ошибок и составлении отчетов.

Однако у него есть print и println , что

печать как паника, прерывает выполнение после печати
panicln like println, прерывает выполнение после печати

Разве это не то же самое, что утверждать? Почему они утверждают, что выше, но имеют панику? я вижу, что это приводит к тем же проблемам, но в конце добавляется сообщение об ошибке, которое можно легко использовать. Я что-то упустил?

Ответы [ 3 ]

16 голосов
/ 30 января 2010

Нет, это не так. паника похожа на «написать, а затем прервать», а утверждение - «проверить, и если оно ложно, написать, а затем прервать». В любом случае, они никак не могут помешать вам сделать подобное утверждению.

2 голосов
/ 12 июня 2011

Помимо очевидного, что panic ничего не проверяет, в то время как assert делает, в Go вы можете использовать механику для обработки ошибок, даже когда возникает паника.

Если пакет думает, что происходит что-то, что не может быть восстановлено, он паникует.

Однако пользователь пакета, вызывающая сторона (родительский уровень) может либо захотеть проверить или зарегистрировать панику, а затем продолжить панику, либо поймать ее, чтобы правильно обработать случай (например, повторить попытку или использовать другой пакет / функция).

Кроме того, assert-abort не вызывает деструкторы или что-либо еще. Паника в Go, тем не менее, будет вызывать даже те функции, которые вы defer будут выполнять, поэтому все вычищено.

Итак, как вы можете видеть, паника позволит выполнять множество задач по очистке в отличие от утверждений. Вот на что ты указывал цитату.

Хорошую информацию об отсрочке, панике и восстановлении см. В официальном сообщении о них .

1 голос
/ 30 января 2010

Например, в C assert() прерывает выполнение только в режиме отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...