os.Exit(0)?Нет. os.Exit(code) немедленно завершает процесс, не выполняя отложенные функции (defer), не давая возможности recover и не вызывая финализаторы.
defer fmt.Println("cleanup")
os.Exit(0) // "cleanup" не выведется
// При обычном return из main() или panic - defer выполнится
log.Fatal и подобные внутри вызывают os.Exit, поэтому с ними тоже не выполняются defer'ы. Используйте os.Exit только когда освобождение ресурсов и логирование уже не нужны (например, после вывода справки по флагу).