ベンチマーク
Goには標準関数でベンチマークを計測するものがあるので、試してみます。
ベンチマーク対象はフィボナッチ数列を計算する関数です。
フィボナッチ数列の計算
main.go
package main
func Fibonacci(n int) int {
if n <= 1 {
return n
}
return Fibonacci(n-1) + Fibonacci(n-2)
}
ベンチマーク関数の作成
main_test.go
package main
import "testing"
func BenchmarkFibonacci(b *testing.B) {
for i := 0; i < b.N; i++ {
Fibonacci(10)
}
}
特徴は*testing.B
型を渡していること、関数名の接頭辞がBenchmark
であることです。
ベンチマーク実行
$ go test -bench=BenchmarkFibonacci
結果
$ go test -bench=BenchmarkFibonacci
goos: darwin
goarch: arm64
pkg: app
BenchmarkFibonacci-10 6455626 186.2 ns/op
PASS
ok github.com/shuyaeer/learn-go/app/day23 1.492s
この関数は6455626回呼び出され、1回の呼出しは186.2 ns程のようです。
すべての回数呼び出すのに1.492sかかったということを表しています。
テストだけではなく、ベンチマークを取ることでパフォーマンス改善にやくだてられそうですね。