Комментарии 28
В принципе если не считать примеры на Go, то статья "6 рекомендаций по разработке безопасных <подставьте свое>-приложений"
Первое, что тут стоит учитывать, заключается в том, что в Go нет исключений.
Кто нибудь может объяснить чем panic
не exception
? Только тем что их не вызывают по поводу и без?
Каждый раз такие зявления глаз режут.
Формально panic нельзя обработать
экспешен может быть обработан на любом удобном программисту уровне.
в некоторых случаях использование паники может выступать сурагатом неправильного и примитивного использования эксепшенов.
Спасибо.
Ну как бы не совсем так.
https://blog.golang.org/defer-panic-and-recover
Recover is a built-in function that regains control of a panicking goroutine. Recover is only useful inside deferred functions. During normal execution, a call to recover will return nil and have no other effect. If the current goroutine is panicking, a call to recover will capture the value given to panic and resume normal execution.
Т.е. если сделать recover()
то потом текущая функция вернётся а рутина продолжится как ни в чём не бывало. Правильно же?
Ну для меня возможность отмены выглядит вполне как управление. Т.е. можно добиться того же что и с исключениями просто возможно не так удобно потом как это намерянно не поощеряется использовать в таком ключе.
управление выводом ошибки переместилось в run(), а вывод «Done» вообще пропал т.к. мы не знаем состояние
Всё, что у Вас пропало и переместилось, произошло не потому, что нельзя сделать как в 1-м случае, а потому что Вы так захотели. Не стоит делать выводы на таком основании. Ну а 1-й вариант на Go можете посмотреть в песочнице
try(func() {
run()
fmt.Print("Done")
}, func(e interface{}) {
fmt.Print("Error")
})
а не для того, чтобы показать, как надо писатьно именно это и является полезной информацией ИМХО
Вы показываете как можно «реализовать», но не говорите о том, что это непригодно для жизни.
А как Вы понимаете эти слова?
Пример был сделан так, чтобы даже PHP-шнику стало понятно, что исключения в Go есть, а не для того, чтобы показать, как надо писать. Паники специально были засунуты в дальний угол
У Вас, как минимум, получилось другое поведение — где if с проверкой типа `e`, и повторный вызов panic?
Там же, где и в Вашем примере с panic. Ведь задача была показать, что исключения есть, а не сделать один в один.
Пример был сделан так, чтобы даже PHP-шнику стало понятно
Похоже, у меня не получилось, но я хотя бы попытался. Если Вы не знаете, как сделать проверку без глобальной переменной, или считаете, что из-за многословности это не исключения, то тут уж ничего не поделать.
Вам, ведь, сразу человек написал:
можно добиться того же что и с исключениями просто возможно не так удобноВы ответили, что нельзя, продемонстрировав это ложным примером, а когда увидели контрпример, начали классическое повышение ставок.
Go стал стандартом де-факто в области создания инструментов командной строки.Можете обосновать это?
6 примеров налитой воды от капитана Очевидности с целью пропихнуть свои продукты.
Возьми хайповый язык
возьми принципы безопасной разработки из PERL
адаптируй код
PROFIT
6 рекомендаций по разработке безопасных Go-приложений