Email or username:

Password:

Forgot your password?
Umnik

Я слепошарый, или в документации #GoLang не сказано, что defer не вызывается, если в коде есть log.Fatalln, например? При этом для паники (и panic, и log.Panic) код отработает.

То есть если есть ситуации, когда нужно аварийно завершить работу, то нужно паниковать, а не фаталить.

5 comments
Maxim Lebedev

@umnik тебе нужно больше кофе, потому что в документации Fatal описан вызов os.Exit, а в его документации указано что в момент его вызова все defer игнорируются:

Maxim Lebedev

@umnik Ну и не стоит злоупотреблять panic только ради отработки defer, оно отработает в конце функции и/или ближайшем return.

У panic немного иная семантика. Это "исключение", чем-то напоминающее try/catch. Это "аварийный выход" в случаях когда дальнейшая работа невозможна. recover в этом случае позволяет ненадолго вернуться во времени чтобы завернуть стек во что-то читаемое, но, цитирую: "Паника всегда фатальна для вашей программы, это конец." ©️ dave.cheney.net/2012/01/18/why

Umnik

@toby3d
У меня дефер в мейне, потому что архив с данными нужен сразу при запуске

Maxim Lebedev

@umnik это ок, просто даю пару советов на будущее :ablobcatcoffee:

Go Up