前言
在go语言中,因为字符串只能被访问,不能被修改,所以进行字符串拼接的时候,golang都需要进行内存拷贝,造成一定的性能消耗。
方式1:操作符 +
特点:简单,可读性良好。每次拼接都会产生内存拷贝,性能一般。仅适用于字符串类型的变量。
示例代码:
str1 := "hello "
str2 := "world"
fmt.Println(str1 + str2) // hello world
方式2:strings.Join
特点:只能用于拼接字符串类型的切片。
示例:
slice1 := []string{"a","b","c"}
fmt.Println(strings.Join(slice1," ")) // a b c
fmt.Println(strings.Join(slice1,"")) // abc
方式3:fmt.Sprint
[]byte
示例:
str1 := "hello "
str2 := "world"
str4 := fmt.Sprint(str1,str2)
fmt.Println(str4)
str5 := fmt.Sprintf("name is %s, and age is %d \n",str2, 17)
fmt.Println(str5)
方式4:bytes.Buffer类型
[]bytestring[]byte
示例代码:
import "bytes"
var b bytes.Buffer
b.WriteString("My ")
b.WriteString("name ")
b.WriteString("is ")
b.WriteString("Bob.")
str6 := b.String()
fmt.Println(str6) // My name is Bob.
方式5:strings.Builder 类型
string[]byteunsafe.Pointerstring[]byte
示例代码:
var c strings.Builder
c.WriteString("My ")
c.WriteString("name ")
c.WriteString("is ")
c.WriteString("Hanlei.")
str7 := c.String()
fmt.Println(str7) // My name is Hanlei.