在Go语言中拼接字符串有以下高效方法:
1. 使用bytes.Buffer
bytes.Buffer实现了io.Writer接口,可高效拼接字符串:
goCopy codevar buffer bytes.Buffer
for i := 0; i < 1000; i++ {
buffer.WriteString("a")
}
s := buffer.String()
该方式的时间复杂度为O(n),性能很高。
2. 使用strings.Builder(Go 1.10新增)
goCopy codevar builder strings.Builder
for i := 0; i < 1000; i++ {
builder.WriteString("a")
}
s := builder.String()
strings.Builder与bytes.Buffer在用法上很相似,也可以高效拼接。
3. 直接使用+=拼接
goCopy codevar s string
for i := 0; i < 1000; i++ {
s += "a"
}
直接使用+=虽简单,但每次都会生成新的字符串,效率较低。
性能比较
简单测试了一下,Benchmark结果如下:
Copy codeBenchmarkBuffer-4 5000000 324 ns/op
BenchmarkBuilder-4 3000000 471 ns/op
BenchmarkAdd-4 500000 3303 ns/op
可见bytes.Buffer和strings.Builder的拼接效率明显优于直接使用+=。
所以在Go语言中,要高效拼接字符串,请优先考虑bytes.Buffer或strings.Builder。
标签:
Go