本文参考自How to efficiently concatenate strings in Go?和Efficient String Concatenation in Go。
(1)直接使用“+=
”:
package main
import (
"fmt"
"strconv"
)
func main() {
s := ""
for i := 0; i <= 9; i++ {
s += strconv.Itoa(i)
}
fmt.Println(s)
}
因为字符串类型在Go
中是不可改变的,因此每次操作实际都要新分配字符串,所以在字符串比较多的时候效率不高。
(2)使用strings.Join()
函数:
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
var s []string
for i := 0; i <= 9; i++ {
s = append(s, strconv.Itoa(i))
}
fmt.Println(strings.Join(s, ""))
}
这种方式需要花费构建slice
的时间。
(3)使用bytes.Buffer
:
package main
import (
"bytes"
"fmt"
"strconv"
)
func main() {
var buffer bytes.Buffer
for i := 0; i <= 9; i++ {
buffer.WriteString(strconv.Itoa(i))
}
fmt.Println(buffer.String())
}
这种方式在字符串比较多时效率最高。
我认为构建slice的时间不应该被算入拼接字符串的时间。
这个效率高是指节约了内存还是节省了时间?
节省时间。