Я слепошарый, или в документации #GoLang не сказано, что defer не вызывается, если в коде есть log.Fatalln, например? При этом для паники (и panic, и log.Panic) код отработает.
То есть если есть ситуации, когда нужно аварийно завершить работу, то нужно паниковать, а не фаталить.
@umnik тебе нужно больше кофе, потому что в документации Fatal описан вызов os.Exit, а в его документации указано что в момент его вызова все defer игнорируются: