2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

log.Fatalはメッセージ出力後に終了ステータス1としてプログラムを終了しようとする

Posted at

結論: APIを利用する場合はきちんとドキュメントを読みましょう(´・ω・`)

go言語のlog.Fatallog.Fatalfおよびlog.Fatallnはメッセージ出力後にos.Exit(1)を発行し、プロセスを終了しようとします。たとえば以下のようなプログラムがあったとします。

main.go
package main

import (
	"fmt"
	"log"
)

func main() {
	fmt.Println("BEFORE")

	log.Fatalln("FATAL")

	fmt.Println("AFTER")
}

これをビルドして実行すると、FATALを出力した後に終了ステータス1でプログラムが終了してしまっていることがわかります (AFTERが出力されていない)

$ go build .
$
$ ./fataltest
BEFORE
2020/11/15 21:02:55 FATAL
$
$ echo $?
1

ほかのプログラミング言語やライブラリによってはログレベルとしてFATALを有しているものがあります。要するにlog.Fatal系の関数を「FATALレベルのログを出力してくれるものなのか!」と思って使うと、思わぬバグを生む可能性があります--というかわたしは生みました (反省)

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?