Go言語におけるベンチマークテストの作成は、関数や処理の性能を計測・評価するための機能で、標準の testing パッケージを用いて行います。Goのベンチマークは、繰り返し処理の実行時間を計測し、パフォーマンス改善の指針を得るのに役立ちます。
1. ベンチマークテストの基本構文
Goでベンチマークテストを書くには、次のような形式の関数を作成します。
-
関数名は
Benchmarkで始める。 -
引数は
*testing.B型。 -
b.NはGoのベンチマーク実行時に自動的に最適化されたループ回数(負荷が適切になるよう調整される)。
2. 実例:文字列連結のベンチマーク
この例では、s += strconv.Itoa(j) による文字列連結処理の性能を測定します。
3. 実行方法
ベンチマークテストは次のように実行します:
主なオプション:
| オプション | 説明 |
|---|---|
-bench=. |
すべてのベンチマークを実行 |
-bench=BenchmarkXxx |
指定の関数のみ実行 |
-benchmem |
メモリアロケーションも表示 |
例:
4. 出力例
各項目の意味:
-
BenchmarkStringConcat-8: 実行されたベンチマーク名(-8はGOMAXPROCSの値) -
2000: ループ回数(b.N) -
800000 ns/op: 1回あたりの処理時間(ナノ秒) -
81920 B/op: 1回あたりのメモリアロケーション量(バイト) -
100 allocs/op: 1回あたりのメモリアロケーション回数
5. ベンチマークの注意点
-
ベンチマーク対象のコード以外に、余計な処理を含めないようにする。
-
入出力(I/O)処理は外すか、モック化することが望ましい。
-
b.ResetTimer()でタイマーのリセットも可能(準備処理の後に実行)。
6. 高度な活用
-
b.StopTimer()/b.StartTimer():一時的に計測を止めたいときに使います。 -
b.ReportAllocs():アロケーションの報告を強制的に有効化。
まとめ
Goのベンチマークテストは、標準の testing パッケージを使って手軽に性能測定ができる強力なツールです。コードのパフォーマンス改善やボトルネック発見に役立ち、go test -bench コマンドにより簡単に利用できます。
生成日:2025/05/03