go-性能编程 字符串拼接性能对比


golang 字符串拼接效率

在Go语言中,常见的字符串拼接方法有以下几种:
  1. 使用 + 操作符
  2. 使用 strings.Join 函数
  3. 使用buffer.WriteString 方法(结合 bytes.Buffer 类型)
  4. 使用 fmt.Sprintf 或 fmt.Fprintf 函数
以下是各种方法的示例代码和性能对比结果:


import (

  "bytes"   "fmt"   "strings" ) func concatPlus(count int) string {   var result string   for i := 0; i < count; i++ {      result += "a"   }   return result } func concatJoin(count int) string {   var slice []string   for i := 0; i < count; i++ {      slice = append(slice, "a")   }   return strings.Join(slice, "") } func concatBuffer(count int) string {   var buffer bytes.Buffer   for i := 0; i < count; i++ {      buffer.WriteString("a")   }   return buffer.String()

}


func concatSprintf(count int) string {   var result string   for i := 0; i < count; i++ {      result = fmt.Sprintf("%s%s", result, "a")   }   return result

}



import "testing" func BenchmarkConcatPlus(b *testing.B) {   for i := 0; i < b.N; i++ {      concatPlus(1000)   } } func BenchmarkConcatJoin(b *testing.B) {   for i := 0; i < b.N; i++ {      concatJoin(1000)   } } func BenchmarkConcatBuffer(b *testing.B) {   for i := 0; i < b.N; i++ {      concatBuffer(1000)   } } func BenchmarkConcatSprintf(b *testing.B) {   for i := 0; i < b.N; i++ {      concatSprintf(1000)   }

}


BenchmarkConcatPlus-8           8216        132436 ns/op BenchmarkConcatJoin-8          56871         18385 ns/op BenchmarkConcatBuffer-8         212742          5709 ns/op BenchmarkConcatSprintf-8           5684        202931 ns/op
从上面的测试结果可以看出,直接使用 + 操作符进行字符串拼接的性能最差,而使用 bytes.Buffer 类型配合 WriteString 方法的性能最好。如果拼接操作频繁,推荐使用 bytes.Buffer。对于较短的字符串拼接,strings.Join 和 fmt.Sprintf 可能具有更好的可读性和更简洁的代码结构。


在线交流