log.Fatal("error") отличается от panic("error")?log.Fatal пишет в лог и вызывает os.Exit(1) - deferred функции не выполняются, recover бесполезен. panic раскручивает стек с выполнением defer, и панику можно перехватить через recover.
log.Fatal - фатальные ошибки при старте (не удалось прочитать конфиг, порт занят)panic - исключительные ситуации в рантайме; в серверах часто перехватывают через recover в middleware