Go语言四种字符串拼接方法性能测试
Go语言的字符串拼接
方法1:直接相加
s1+s2
方法2:fmt.Sprint()拼接
fmt.Sprint(s1,s2)
方法3:bytes.Buffer写入
var bb bytes.Buffer
bb.WriteString(s1);bb.WriteString(s2);
bb.String()
方法4:strings.Builder写入
var sb strings.Builder
sb.WriteString(s1);sb.WriteString(s2);
sb.String()
声明拼接函数
cal.go
package test
import (
"bytes"
"fmt"
"strings"
)
func funcAdd(n int) string {
res := ""
for i := 0; i < n; i++ {
res += "string"
}
return res
}
func funcSprint(n int) string {
res := ""
for i := 0; i < n; i++ {
res = fmt.Sprint(res, "string")
}
return res
}
func funcByteBuffer(n int) string {
var res bytes.Buffer
for i := 0; i < n; i++ {
res.WriteString("string")
}
return res.String()
}
func funcStringBuilder(n int) string {
var res strings.Builder
for i := 0; i < n; i++ {
res.WriteString("string")
}
return res.String()
}
测试拼接函数
cal_test.go
package test
import "testing"
func TestAdd(t *testing.T) {
funcAdd(100000)
}
func TestSprint(t *testing.T) {
funcSprint(100000)
}
func TestByteBuffer(t *testing.T) {
funcByteBuffer(100000)
}
func TestStringBuildert(t *testing.T) {
funcStringBuilder(100000)
}
测试拼接100000次的耗时
go test -v
=== RUN TestAdd
--- PASS: TestAdd (3.91s)
=== RUN TestSprint
--- PASS: TestSprint (9.53s)
=== RUN TestByteBuffer
--- PASS: TestByteBuffer (0.00s)
=== RUN TestStringBuildert
--- PASS: TestStringBuildert (0.00s)
PASS
ok
由此可以看出大量拼接字符串时要是用bytes.Buffer
或者strings.Builder
进行写入的方式拼接。