📺

Go の log.Fatal は気軽に使ったあかん!

2021/10/30に公開

log.Fatalはアプリケーションの実行が終了されるので、気軽に使うのはやめましょう!

log pkgの中身は以下

// Fatal is equivalent to Print() followed by a call to os.Exit(1).
func Fatal(v ...interface{}) {
    std.Output(2, fmt.Sprint(v...))
    os.Exit(1)
}

os.Exit(1) されてるので、アプリケーションの実行が終了される。
なのでとりあえずログに吐きたい時は log.Println などにしましょう。
log.Println だとexitされないです。

log.Println のsrcは以下

// Println calls Output to print to the standard logger.
// Arguments are handled in the manner of fmt.Println.
func Println(v ...interface{}) {
	std.Output(2, fmt.Sprintln(v...))
}

参照

https://cs.opensource.google/go/go/+/refs/tags/go1.17.2:src/log/log.go;l=316
https://pkg.go.dev/log

Discussion