-
Notifications
You must be signed in to change notification settings - Fork 175
Open
Description
在Go中字符串是原生类型,是只读的,所以用"+"操作符进行字符串时会创建一个新的字符串。如果在循环中使用"+"进行字符串拼接则会创建多个字符串,比如下面这样:
var s string
for i := 0; i < 1000; i++ {
s += "a"
}那么怎么更高效得进行字符串拼接呢?在早先Go1.10 以前使用的是bytes.Buffer。
package main
import (
"bytes"
"fmt"
)
func main() {
var buffer bytes.Buffer
for i := 0; i < 1000; i++ {
buffer.WriteString("a")
}
fmt.Println(buffer.String())
}Go 1.10版本后引入了一个strings.Builder类型,它是这么用的:
package main
import (
"strings"
"fmt"
)
func main() {
var str strings.Builder
for i := 0; i < 10; i++ {
str.WriteString("a")
}
fmt.Println(str.String())
}会比使用 "+" 或 "+=" 性能高三到四个数量级。
Metadata
Metadata
Assignees
Labels
No labels