Go语言中高效拼接字符串的多种方法

在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。