简介
基准测试是一种测试代码性能的方法。想要测试解决同一问题的不同方案的性能,以及查看哪种解决方案的性能更好时,基准测试就会很有用。基准测试也可以用来识别某段代码的CPU或者内存效率问题,还可以用基准测试来测试不同的并发模式,或者用基准测试来辅助配置工作池的数量,以保证能最大化系统的吞吐量。
文档
youtube
前言
go中数值转字符串有多种方式,例如
- fmt.Sprintf()
- strconv.FormatInt()
- strconv.Itoa()
例子
func BenchmarkSprintf(b *testing.B) {
number := 10
b.ResetTimer()
for i := 0; i < b.N; i++ {
fmt.Sprintf("%d",number)
}
}
基准测试的格式应该为func BenchmarkXxx(*testing.B)
- 运行
go test -bench="BenchmarkSprintf" -run="none" -benchtime="3s" -benchmem
-
-bench
只有在提供bench标签时才会被认为是进行基准测试 -
-run="none"
来保证在运行制订的基准测试函数之前没有单元测试会被运行 -
-benchtime
更改测试执行的最短时间,默认为一秒 -
-benchmem
可以提供每次操作分配内存的次数,以及总共分配的字节数
-
完整代码
- main_test.go
package main import ( "fmt" "strconv" "testing" ) func BenchmarkSprintf(b *testing.B) { number := 10 b.ResetTimer() for i := 0; i < b.N; i++ { fmt.Sprintf("%d", number) } } func BenchmarkFormatInt(b *testing.B) { number := int64(10) b.ResetTimer() for i := 0; i < b.N; i++ { strconv.FormatInt(number, 10) } } func BenchmarkItoa(b *testing.B) { number := 10 b.ResetTimer() for i := 0; i < b.N; i++ { strconv.Itoa(number) } }
- 执行基准测试
go test -bench=. -run="none" -benchtime="3s" -benchmem
网友评论