log.Fatal — logs and exits (os.Exit(1)). log.Panic — logs and panics (panic()).
log.Fatal:
os.Exit(1).1func main() {2 defer cleanup() // Will NOT run3 if err := start(); err != nil {4 log.Fatal("Failed: ", err)5 }6}
log.Panic:
panic().1func main() {2 defer func() {3 if r := recover(); r != nil {4 log.Printf("Recovered: %v", r)5 }6 }()7 defer cleanup() // Will run8 if err := start(); err != nil {9 log.Panic("Failed: ", err)10 }11}
When to use log.Fatal:
When to use log.Panic:
Common mistakes:
log.Fatal when cleanup needed.log.Panic without recover().log.Fatal skips deferred functions.log.Fatal in goroutines.