yyh-gl's icon

yyh-gl's Tech Blog

技術ネタ中心のブログです。主な扱いはバックエンド技術と設計です。

yyh-gl

1 分で読めます

featured

go test のキャッシュを消すのは簡単

$ go clean -testcache

以上です!

$ go test ./...
ok  	github.com/oxequa/realize	(cached)
ok  	github.com/oxequa/realize/realize	(cached)

このように (cached) となっていたものが、、、

$ go clean -testcache
$ go test ./...
ok  	github.com/oxequa/realize	0.086s
ok  	github.com/oxequa/realize/realize	0.389s

このように、実行時間が表示されており、キャッシュが消えていることが分かりますね。


ちなみに、キャッシュを無視する方法はもうひとつあり、
以下のように -count=1 をつけてやればOKです。

$ go test ./... -count=1
ok  	github.com/oxequa/realize	0.076s
ok  	github.com/oxequa/realize/realize	0.384s

ここからは上記コマンドが一体なにをしてくれたのか、
もう少し詳細に話していきます。

go clean とは

こちら にドキュメントがあります。

Clean removes object files from package source directories.

go clean は上記のとおりファイルを消してくれるわけですね。

-testcache オプションをつけると、
テストに関するキャッシュファイルのみを消してくれます。

では、次にキャッシュファイルがどこにあるのか見ていきます。

キャッシュはどこに保存されている?

環境変数 GOCACHE で指定されている場所に保存されます。

参考:公式ドキュメント

count オプションについて

最後に$ go test ./... -count=1 によって、
キャッシュを無効化できた理由についてです。

この話は公式ドキュメント にて、
「本来意図した使い方ではないが、そういう使い方もできる」
ぐらいのニュアンスで紹介されています(以下参照)

The idiomatic way to disable test caching explicitly is to use -count=1.


そもそも、countオプションはその名前のとおり、 キャッシュ無効化のためのものではないです。

countオプションはテストを指定回数実行し、
そのベンチマークを取るためのオプションです(以下参照)

-count n

 Run each test and benchmark n times (default 1).
 If -cpu is set, run n times for each GOMAXPROCS value.
 Examples are always run once.

ベンチマークを取るのにあたってキャッシュは不要であるため、
countオプションがつくとキャッシュが無効化されます。

このルールを応用して、-count=1とすることで、
テスト自体は1回しか実行されず、かつ、キャッシュも無効化して、
テストを走らせることができるわけです。


なるほど

最近の投稿

About

東京で働くソフトウェアエンジニアです。バックエンドがメインですが、フロントエンドやインフラもさわっています。