go字符串性能
2019-10-31 本文已影响0人
木工007
GO字符串拼接
1) +运算符
2)fmt.Sprintf函数
3) bytes.Buffer
4) strings.Builder
5) strings.Join函数
GO基准测试
1) 测试文件以_test结尾(与单测在同一个文件)
2) 测试函数以Benchmark开头,参数为*testing.B
3) 测试函数体放在for循环中,循环次数以b.N指定
字符串函数对比
测试程序
字符串拼接函数 字符串拼接基准测试函数测试结果
测试命令01
go test -bench=. -benchtime=1s
测试结果01
goos: linuxgoarch: amd64
BenchmarkAddString-8 50 20644142 ns/op
BenchmarkAddStringByBuffer-8 20000 75864 ns/op
BenchmarkAddStringByFmt-8 50 26507075 ns/op
BenchmarkAddStringByBuilder-8 10000 106980 ns/op
PASS
ok _/home/GOProject/opt 5.796s
测试命令02
go test -bench=. -benchtime=30s
测试结果02
goos: linux
goarch: amd64
BenchmarkAddString-8 10000000 6958 ns/op
BenchmarkAddStringByBuffer-8 50000000 1137 ns/op
BenchmarkAddStringByFmt-8 3000000 14990 ns/op
BenchmarkAddStringByBuilder-8 30000000 1251 ns/op
结论
从测试结果看字符串拼接函数性能:bytes.Buffer > strings.Builder > + >fmt.Sprintf
字符串是不可变对象,字符串+操作会产生新的字符串对象。频繁的字符串拼接可以用bytes.Buffer来实现。