Go高性能编程
发布于 2018-06-17 · 本文总共 1053 字 · 阅读大约需要
4 分钟
高效字符串连接
fmt.Sprintf("%v%v", s, i)
// 67588 15625 ns/op
strings.Builder
builder.WriteString()
// 1271404 824 ns/op
bytes.Buffer
buf.WriteString()
// 1039795 1135 ns/op
+=
// 205066 5105 ns/op
strings.Builder性能最好
const numbers = 100
func BenchmarkSprintf(b *testing.B) {
b.ResetTimer()
for idx := 0; idx < b.N; idx++ {
var s string
for i := 0; i < numbers; i++ {
s = fmt.Sprintf("%v%v", s, i)
}
}
b.StopTimer()
// 67588 15625 ns/op
// PASS
}
func BenchmarkStringBuilder(b *testing.B) {
b.ResetTimer()
for idx := 0; idx < b.N; idx++ {
var builder strings.Builder
for i := 0; i < numbers; i++ {
builder.WriteString(strconv.Itoa(i))
}
_ = builder.String()
}
b.StopTimer()
// 1271404 824 ns/op
// PASS
}
func BenchmarkBytesBuf(b *testing.B) {
b.ResetTimer()
for idx := 0; idx < b.N; idx++ {
var buf bytes.Buffer
for i := 0; i < numbers; i++ {
buf.WriteString(strconv.Itoa(i))
}
_ = buf.String()
}
b.StopTimer()
// 1039795 1135 ns/op
// PASS
}
func BenchmarkStringAdd(b *testing.B) {
b.ResetTimer()
for idx := 0; idx < b.N; idx++ {
var s string
for i := 0; i < numbers; i++ {
s += strconv.Itoa(i)
}
}
b.StopTimer()
// 205066 5105 ns/op
// PASS
}