+ 号拼接
对于 + 号拼接,跟 php 的 . 一样,不过由于 go 中的字符串是不可变的数据类型,因此用 + 连接会产生一个新的字符串对效率有影响,在有大量字符串操作时,不建议用这种方式,不过对于少量的字符串处理,任何一种方式的处理效率都差不多。
fmt.Sprintf()
str := fmt.Sprintf("我是%s", "吴彦祖")
log.Fatalln(str)
strings.Join()
Join() 函数会先根据字符串数组的内容,计算出一个拼接之后的长度,然后申请对应大小的内存,一个
一个字符串填入,在已有一个数组的情况下,这种效率会很高,如果没有的话效率也不高。Join() 底层也是使用的 strings.Builder
import (
"log"
"strings"
)
func main() {
strArr := []string{
"我是",
"吴彦祖",
}
log.Fatalln(strings.Join(strArr, ""))
}
buffer.WriteString
import (
"bytes"
"log"
)
func main() {
var (
buffer bytes.Buffer
)
buffer.WriteString("我是")
buffer.WriteString("吴彦祖")
log.Fatalln(buffer.String())
}
strings.Builder
import (
"log"
"strings"
)
func main() {
var (
build strings.Builder
)
build.WriteString("我是")
build.WriteString("吴彦祖")
log.Println(build.String())
}
结论
对于少量字符串的拼接,以上任何方法执行效率都不是瓶颈,但是大量的字符串拼接,strings.Builder 是最好的方式。
本文对比了Go语言中不同字符串拼接方法的性能,包括+号拼接、fmt.Sprintf、strings.Join、buffer.WriteString及strings.Builder。针对少量和大量字符串拼接场景给出了最佳实践建议。
1863

被折叠的 条评论
为什么被折叠?



