Golang字符串拼接
Golang中字符串的拼接存在很多种方法,性能也存在明显的差异。考虑一种场景,需要连续地拼接大量字符串。
不同字符串拼接的性能对比
采用操作符+
拼接
func BenchmarkConcatenateStringByPlus(b *testing.B) {
var testStr string
for i := 0; i < b.N; i++ {
// Concatenating strings using + operator.
testStr += "test"
}
}
采用strings.Join
函数
func BenchmarkConcatenateStringByJoin(b *testing.B) {
// Creating and initializing slice of string
var testSlice []string
for i := 0; i < b.N; i++ {
testSlice = append(testSlice, "test")
}
str := strings.Join(testSlice, "")
_ = str
}
采用bytes.Buffer
的WriteString
函数
func BenchmarkConcatenateStringByBuffer(b *testing.B) {
// Creating and initializing strings using bytes.Buffer with writeString() function.
var testBuffer bytes.Buffer
for i := 0; i < b.N; i++ {
testBuffer.WriteString("test")
}
}
采用strings.Builder
的WriteString
函数
func BenchmarkConcatenateStringByBuilder(b *testing.B) {
// Using strings.Builder
var testBuilder strings.Builder
for i := 0; i < b.N; i++ {
testBuilder.WriteString("test")
}
}
运行golang命令go test -bench=. -v
得到各个案例的性能得分。
BenchmarkConcatenateStringByPlus-16 409539 88628 ns/op
BenchmarkConcatenateStringByJoin-16 13896931 92.5 ns/op
BenchmarkConcatenateStringByBuffer-16 145830595 9.34 ns/op
BenchmarkConcatenateStringByBuilder-16 363210975 10.7 ns/op
根据压测结果,在需要频繁拼接字符串的场景下,WriteString
显然是最优的选择,相较于前两种存在数量级的差距。