对比 +(运算符)、strings.Join、sprintf、bytes.Buffer对字符串拼接的性能
package main import ( "bytes" "fmt" "strings" "testing" ) func TestfourPlusFour(t *testing.T) { fmt.Println("testing") } func BenchmarkAddStringWithOperator(b *testing.B) { hello := "" for i := 0; i < b.N; i++ { hello += "hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello" } } func BenchmarkAddStringWithSptint(b *testing.B) { hello := "" for i := 0; i < b.N; i++ { hello = fmt.Sprintf("%s%s", hello, "hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello") } } func BenchmarkAddStringWithJoin(b *testing.B) { hello := "" for i := 0; i < b.N; i++ { hello = strings.Join([]string{hello, "hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello"}, "") } } func BenchmarkAddStringWithBuffer(b *testing.B) { var buf bytes.Buffer for i := 0; i < b.N; i++ { buf.WriteString("hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello") } _ = buf.String() }
运行测试结果:
在一些性能要求较高的场合,尽量使用buf.WriteString()以获得较好的可读性