【发布时间】:2017-11-24 15:05:58
【问题描述】:
按照 golang 中的基准示例测试,我可以进行以下测试:
// An example benchmark to benchmark a query based on different inputs
func Benchmark_GetProcessingCountForRegions(b *testing.B) {
benchmarks := []struct {
region string
}{
{"EU"},
{"US"},
}
for _, bm := range benchmarks {
b.Run(bm.region, func(bbb *testing.B) {
for i := 0; i < bbb.N; i++ {
taskDb.GetProcessingCountForRegion(bm.region)
}
})
}
}
这是来自网络的默认示例,适用于我;测试 taskDb 包的 GetProcessingCountForRegion 查询性能。
但是为了这个测试的可读性,我试图提取内部 func,即位于 b.Run() 中的那个,就像这样,首先提取 func 并将其放在一边:
func GetProcessingCountForRegion(testingB *testing.B, region string) {
for i := 0; i < testingB.N; i++ {
taskDb.GetProcessingCountForRegion(region)
}
}
然后像这样在实际的 testfunc 中使用这个函数:
for _, bm := range benchmarks {
b.Run(bm.region, GetProcessingCountForRegion(*b, bm.region))
}
但是这会产生编译错误: 不能在 GetProcessingCountForRegion 的参数中使用 *b (type testing.B) 作为 *testing.B 类型
从 *b 中删除 *,会产生以下编译错误: GetProcessingCountForRegion(b, bm.region) 用作值
所以我想要的是从 B.Run(..) 语句中删除 func 参数。
我错过了什么?
【问题讨论】: