12.3 標準ライブラリでログを出力する

標準ライブラリにはlogというログ出力に使えるパッケージがあります。何もインストールせずに使えます。

import (
	"log"
)
	log.Println("ログ出力をします")
	// output: 2020/02/13 22:26:27 ログ出力をします
	n := 10
	s := "文字列"
	c := 1 + 2i
	log.Printf("%d, %sなどを使って変数出力もできます。%vはどんな型でも表示します", n, s, c)

logパッケージには、fmtパッケージと同じくPrintln()や、Printf()といった関数があり、変数の内容などを出力できます。作成したプログラムが期待と違った動きをしているとき、どこがおかしいのかあたりをつけるために変数の内容をダンプする手段として便利です。デバッガーを使う方法もありますが、並列処理で動いているコードの状態を調べるようなケースでは、シンプルにして一番確実なソリューションでもあります。

12.3.1 ユニットテストの中のログ出力

ユニットテストのコード中では、testing.Tの関数Log()Logf()Fatal()Fatalf()を使いましょう。これで失敗時の出力やgo test -vで実行したときに内容が表示されるようになります。必要な情報だけをフィルタリングしてすばやく情報が得られます。テスト対象のコードにtesting.Tを引き回すことはないので、_test.goのファイル中はこちらを使い、それ以外はlogを使う、と使い分ければ良いでしょう。

func TestLog(t *testing.T) {
	t.Log("失敗時やgo test -vのときだけ表示されます" ...