拼接字串串的方式共5种
方式一:使用 “+”
字符串只能被访问,不能被修改。所以在拼接字符串时,需要内存拷贝,会带来性能的消耗。
但是可读性强,适合少量字符串拼接
package main
import "fmt"
func main() {
var (
a string = "一"
b string = "二"
c string = "三"
stringJoin string
)
stringJoin = a + b + c
fmt.Println("使用‘+’拼接字符串的结果为:", stringJoin)
}
方式二:使用 strings.Join()
适合字符串类型的切片拼接
package main
import (
"fmt"
"strings"
)
func main() {
str := []string{"a", "b", "c"}
var strJoin string = strings.Join(str, ",")
fmt.Println("使用strings.Join拼接字符串的结果为:", strJoin)
}
方式三:使用fmt.Sprint
可以拼接其他类型,但会涉及类型的转换,底层实现是[] byte字节切面
package main
import "fmt"
func main() {
var (
name string = "张三"
age int32 = 18
str string
)
str = fmt.Sprintf("姓名:%s,年龄:%d", name, age)
str1 := fmt.Sprint(name, age)
str2 := fmt.Sprintln(name, age)
fmt.Println(str)
fmt.Println(str1)
fmt.Println(str2)
// 结果:
// 姓名:张三,年龄:18
// 张三18
// 张三 18
//
}
方式四:使用bytes.Buffer
支持字符串,字符,unicode,但会涉及字符串和[] byte之间的转换,底层[] byte,性能一般,因为WtiteString方法使用的buffer太长,会导致panic,少量拼接可以使用
package main
import (
"bytes"
"fmt"
)
func main() {
var (
info bytes.Buffer
str string
)
info.WriteString("my")
info.WriteString("name")
info.WriteString("is")
info.WriteString("Tom")
str = info.String()
fmt.Println("使用bytes.Buffer拼接结果为:", str)
//结果:
//使用bytes.Buffer拼接结果为: mynameisTom
}
方式五:使用strings.Builder
支持字符串,字符,unicode,使用unsafe。Pointer优化了字符串和[] byte之间的转换,在字符串大量拼接的场景下建议使用
var (
info strings.Builder
str string
)
info.WriteString("my")
info.WriteString("name")
info.WriteString("is")
info.WriteString("Tom")
str = info.String()
fmt.Println("使用strings.Buffer拼接结果为:", str)
//使用strings.Buffer拼接结果为: mynameisTom