运行 Go Benchmark 时的奇怪输出
Strange output when running Go Benchmark
我正在尝试用 Go 为简单的 echo 程序编写基准函数("The Go Programming Language" 书中的练习 1.3)。这是代码:
package echo
import "testing"
func BenchmarkEcho1(b *testing.B) {
for i := 0; i < b.N; i++ {
Echo1()
}
}
当我 运行 go test -bench=.
输出是这样的:
PASS
BenchmarkEcho1-4 -test.bench=Echo1
-test.bench=Echo1
-test.bench=Echo1
-test.bench=Echo1
[...]
-test.bench=Echo1
-test.bench=Echo1
-test.bench=Echo1
-test.bench=Echo1
1000000 1358 ns/op
ok gopl.io/ch1/exercise1.3/echo 1.377s
第一行和最后一行之间有很多-test.bench=Echo1
。为什么会这样?我该怎么做才能省略这些行?
您了解 b.N
具有非常大的价值,因此 Echo1 被执行了很多次吗?
唯一的解释是 Echo1 正在打印您看到的文本。
您的 Echo1()
函数可能包含如下内容:
var s string
for i := 1; i < len(os.Args); i++ {
s += os.Args[i]
}
fmt.Println(s)
我正在尝试用 Go 为简单的 echo 程序编写基准函数("The Go Programming Language" 书中的练习 1.3)。这是代码:
package echo
import "testing"
func BenchmarkEcho1(b *testing.B) {
for i := 0; i < b.N; i++ {
Echo1()
}
}
当我 运行 go test -bench=.
输出是这样的:
PASS
BenchmarkEcho1-4 -test.bench=Echo1
-test.bench=Echo1
-test.bench=Echo1
-test.bench=Echo1
[...]
-test.bench=Echo1
-test.bench=Echo1
-test.bench=Echo1
-test.bench=Echo1
1000000 1358 ns/op
ok gopl.io/ch1/exercise1.3/echo 1.377s
第一行和最后一行之间有很多-test.bench=Echo1
。为什么会这样?我该怎么做才能省略这些行?
您了解 b.N
具有非常大的价值,因此 Echo1 被执行了很多次吗?
唯一的解释是 Echo1 正在打印您看到的文本。
您的 Echo1()
函数可能包含如下内容:
var s string
for i := 1; i < len(os.Args); i++ {
s += os.Args[i]
}
fmt.Println(s)