我这里对字符串的连接讲解主要是通过事例,通过不同的函数不同的实现方式,具体的实现方式的压测没有贴上来了,大家有兴趣自行压测一下。
package main
import (
"fmt"
"strings"
"bytes"
)
func main() {
//这一个小结我们讲字符串连接的方式,然后会大致总结一下字符串连接的效率,哪种方式好,哪种方式效率高
//1.最常见的事字符串 + 进行连接
a := "xxxxx"
b := "bbbbb"
c := a + b
fmt.Println(c)
//2.使用strings.Join连接
d := []string{a, b}
e := strings.Join(d, "")
fmt.Println(e)
//3.使用fmt.Sprint
f := fmt.Sprint(a, b)
fmt.Println(f)
//4.使用bytes.Buffer
g := new(bytes.Buffer)
g.WriteString(a)
g.WriteString(b)
fmt.Println(g)
//5.使用strings.Builder
h := new(strings.Builder)
h.WriteString(a)
h.WriteString(b)
fmt.Println(h)
//6.slice固定长度.转成string,
i := make([]byte, 20)
i = append(i, []byte(a)...)
i = append(i, []byte(b)...)
fmt.Println(string(i))
//这里是比较常用的一些常用的字符串连接方式,我其实每一种都测试过,之前线上有个转码的问题,每次字符串做对比,
// 最后其实我采用了固定slice长度,保存byte,然后转换成string,性能最好,当然其实我也用过sync.pool,想减少gc操作,然后发现sync.pool需要比较大的字符串,且操作频繁的才有效
//这里我没有用过使用go本身的工具去分析这个每个链接的功能了,大家有兴趣自己去实践一下,
//+ 连接适用于短小的、常量字符串(明确的,非变量),因为编译器会给我们优化。
//Join是比较统一的拼接,不太灵活
//fmt和buffer基本上不推荐
//builder从性能和灵活性上,都是上佳的选择。
//如果能固定字符串长度,那使用slice byte是最佳选择
}