+ 号拼接
对于 +
号拼接,跟 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
是最好的方式。