生涯未熟

生涯未熟

プログラミングをちょこちょこと。

Go 1.12で個人的に気になったところを触ってみた

Go 1.12来ましたね。

色々変更点はあるんですが、個人的にベンチマークの実行回数が指定出来るようになったのがオッとなり触ってみました。

実行コード

簡単なコードで試してみます。

package main

func Calc(x, y int) int {
    return x + y
}
package main

import (
    "testing"
)

func BenchmarkCalc(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Calc(b.N, b.N)
    }
}

足し算するやつです。

試す

まずは今までやっていた実行秒数指定から。

$ go test -bench . -benchtime=5s
goos: darwin
goarch: amd64
pkg: hoge
BenchmarkCalc-8         10000000000              0.35 ns/op
PASS
ok      hoge      3.516s

5秒間回せました。
次に5回実行するようにやってみましょう。

$ go test -bench . -benchtime=5x
goos: darwin
goarch: amd64
pkg: hoge
BenchmarkCalc-8                5                53.0 ns/op
PASS
ok      hoge      0.006s

おー!5回実行できてますね!!
ただ、あまりにも少ない実行回数だと1回あたりの実行時間が大きくなってしまうみたいですね・・・

ちなみに10000000000回だと

$ go test -bench . -benchtime=10000000000x
goos: darwin
goarch: amd64
pkg: hoge
BenchmarkCalc-8         10000000000              0.35 ns/op
PASS
ok      hoge      3.541s

先程の実行時間指定でベンチマークしてみた値と同じになりました。

まとめ

これが実装された経緯が

github.com

これだと思うのですが、Russ Cox氏の反論とか見てると面白いですね。
正直、僕も実行回数指定出来てもあんま意味ないんじゃないかと思っとります。

取り急ぎ、現場からは以上です。