字符串的拼接一共有6种方式:
1、+
2、fmt.Sprintf 性能是最差的
3、bytes.Buffer
4、strings.Builder 性能是最好的
5、append
6、strings.Join
0、定义的变量
age := 28
name := "张三"
address := "北京市海淀区"
s2 := "2xyz"
方式1 +
fmt.Println(s2 + s2)
fmt.Println("111我的年纪是:"+strconv.Itoa(age), "我的姓名是:"+name, "我的地址是:"+address)
输出:
2xyz2xyz
111我的年纪是:28 我的姓名是:张三 我的地址是:北京市海淀区
方式2 fmt.Sprintf
fmt.Printf("2年纪:%d,姓名:%s,地址为:%s\n", age, name, address)
s := fmt.Sprintf("22年纪:%d,姓名:%s,地址为:%s\n", age, name, address)
fmt.Println(s)
输出:
2年纪:28,姓名:张三,地址为:北京市海淀区
22年纪:28,姓名:张三,地址为:北京市海淀区
方式3 bytes.Buffer
底层实现和strings.Builder差不多,区别在于bytes.Buffer转化为字符串时需要重新申请一片空间来存放生成的字符串变量,性能仅次于strings.Builder
buffer := bytes.Buffer{}
buffer.WriteString("33年纪:")
buffer.WriteString(strconv.Itoa(age))
buffer.WriteString("姓名:")
buffer.WriteString(name)
buffer.WriteString("地址:")
buffer.WriteString(address)
bytes := make([]byte, buffer.Len())
buffer.Read(bytes)
fmt.Println(string(bytes))
输出:
33年纪:28姓名:张三地址:北京市海淀区
方式4 strings.Builder
底层存储用的是[]byte,每次分配内存的时候,支持预分配内存并且自动扩容
build := strings.Builder{}
build.WriteString("44年纪:")
build.WriteString(strconv.Itoa(age))
build.WriteString("姓名:")
build.WriteString(name)
build.WriteString("地址:")
build.WriteString(address)
fmt.Println(build.String())
输出:
44年纪:28姓名:张三地址:北京市海淀区
方式5 append
s1 := []string{"1abcdef"}
s3 := []byte{'1', '2', '5'}
for _, v := range s1 {
s3 = append(s3, v...) //这里不能追加字符,想追加字符的话,把单个的字符转化字符串
}
fmt.Printf("%s\n", s3)
输出:
1251abcdef
方式6 strings.Join
str := []string{"6hello", "word", "!"}
resulate := strings.Join(str, "->")
fmt.Println(resulate)
输出:6hello->word->!