go - 运行 Go Benchmark 时出现奇怪的输出

标签 go benchmarking

我正在尝试用 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 具有非常大的值(value),因此 Echo1 会被执行很多次吗? 唯一的解释是 Echo1 正在打印您看到的文本。

您的 Echo1() 函数可能包含如下内容:

var s string
for i := 1; i < len(os.Args); i++ {
    s += os.Args[i]
}
fmt.Println(s)

关于go - 运行 Go Benchmark 时出现奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43082006/

相关文章:

go - 测试Golang导入的函数被调用?

go - 在 Go gRPC 处理程序中从客户端证书获取主题 DN

post - 如何发送响应以获取 API

python-2.7 - pytest-timeit或pytest-benchmark在精度s上哪个更好?

javascript - coffeescript 比 javascript 快吗?

unit-testing - 处理程序单元测试的模拟功能

go - 无法将 'func(c Container) interface{} { return &MyService{} }'(类型func(c Container)interface {})用作ContainerFunc类型

apache - 使用Ab对多个URL进行基准测试

java - Java 基准测试(比较两个类)

c# - Java 与 C# : Are there any studies that compare their execution speed?