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: linux

goarch: 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来实现。

上一篇下一篇

猜你喜欢

热点阅读