概要
以下の記事で知りました。感謝 m( )m
Go1.13のときは、t.Log()
すると、テストが完了してから出力されていたのですが
Go1.14からは、バッファリングせずに即出力されるようになっているみたいですね。
準備
自分の環境は、先日 go1.14 にしてしまったので、go1.13をダウンロードして試してみます。
$ go version go version go1.14 windows/amd64 $ cd $(go env GOPATH) $ go get golang.org/dl/go1.13 $ go1.13 download Downloaded 0.0% ( 16384 / 133885977 bytes) ... Downloaded 0.7% ( 899869 / 133885977 bytes) ... Downloaded 1.2% ( 1669917 / 133885977 bytes) ... ・ ・ ・ Downloaded 100.0% (133885977 / 133885977 bytes) Success. You may now run 'go1.13' $ go1.13 version go version go1.13 windows/amd64
サンプル
package testings import ( "fmt" "testing" "time" ) func TestTLog(t *testing.T) { // ---------------------------------------------------------------------- // t.Log() の挙動が go1.13 と go1.14 では以下のように変わっている // // [go1.13] // - バッファリングされていて、テストが完了した後に出力される // [go1.14] // - バッファリング無しで、即出力される // // REFERENCES:: // - https://dave.cheney.net/2020/03/10/go-test-v-streaming-output // - https://devlights.hatenablog.com/entry/2019/11/07/003735 // ---------------------------------------------------------------------- for i := 0; i < 5; i++ { fmt.Printf("fmt %d\n", i) t.Logf("t.Log %d\n", i) time.Sleep(1 * time.Second) } /* $ go version go version go1.14 windows/amd64 $ cd $(go env GOPATH) $ go get golang.org/dl/go1.13 $ go1.13 download Downloaded 0.0% ( 16384 / 133885977 bytes) ... Downloaded 0.7% ( 899869 / 133885977 bytes) ... Downloaded 1.2% ( 1669917 / 133885977 bytes) ... ・ ・ ・ Downloaded 100.0% (133885977 / 133885977 bytes) Success. You may now run 'go1.13' $ go1.13 version go version go1.13 windows/amd64 $ go1.13 test -v examples/basic/testings/testing_log_test.go === RUN TestTLog fmt 0 fmt 1 fmt 2 fmt 3 fmt 4 --- PASS: TestTLog (5.00s) testing_log_test.go:20: t.Log 0 testing_log_test.go:20: t.Log 1 testing_log_test.go:20: t.Log 2 testing_log_test.go:20: t.Log 3 testing_log_test.go:20: t.Log 4 PASS ok command-line-arguments 5.095s $ go test -v examples/basic/testings/testing_log_test.go === RUN TestTLog fmt 0 TestTLog: testing_log_test.go:20: t.Log 0 fmt 1 TestTLog: testing_log_test.go:20: t.Log 1 fmt 2 TestTLog: testing_log_test.go:20: t.Log 2 fmt 3 TestTLog: testing_log_test.go:20: t.Log 3 fmt 4 TestTLog: testing_log_test.go:20: t.Log 4 --- PASS: TestTLog (5.00s) PASS ok command-line-arguments 5.086s */ }
try-golang/testing_log_test.go at master · devlights/try-golang · GitHub
実行すると以下のようになります。
$ go1.13 test -v examples/basic/testings/testing_log_test.go === RUN TestTLog fmt 0 fmt 1 fmt 2 fmt 3 fmt 4 --- PASS: TestTLog (5.00s) testing_log_test.go:20: t.Log 0 testing_log_test.go:20: t.Log 1 testing_log_test.go:20: t.Log 2 testing_log_test.go:20: t.Log 3 testing_log_test.go:20: t.Log 4 PASS ok command-line-arguments 5.095s $ go test -v examples/basic/testings/testing_log_test.go === RUN TestTLog fmt 0 TestTLog: testing_log_test.go:20: t.Log 0 fmt 1 TestTLog: testing_log_test.go:20: t.Log 1 fmt 2 TestTLog: testing_log_test.go:20: t.Log 2 fmt 3 TestTLog: testing_log_test.go:20: t.Log 3 fmt 4 TestTLog: testing_log_test.go:20: t.Log 4 --- PASS: TestTLog (5.00s) PASS ok command-line-arguments 5.086s
確かに、変わっていますね。
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場