【问题标题】:Strange output when running Go Benchmark运行 Go Benchmark 时出现奇怪的输出
【发布时间】:2019-03-07 08:30:13
【问题描述】:

我正在尝试为 Go 中的简单回显程序编写基准函数(“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。为什么会这样?我该怎么做才能省略这些行?

【问题讨论】:

    标签: go benchmarking


    【解决方案1】:

    您知道b.N 具有非常大的价值,因此 Echo1 会执行很多次吗? 唯一的解释是 Echo1 正在打印您看到的文本。

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

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

    【讨论】:

    • 天哪。我现在觉得自己好傻。出于某种原因,我认为基准函数不会产生“回声”的输出。非常感谢!
    猜你喜欢
    • 2012-04-13
    • 1970-01-01
    • 2011-02-07
    • 2011-02-23
    • 1970-01-01
    • 2014-12-20
    • 2017-01-03
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多