Golang语⾔如何⾼效拼接字符串详解
⽬录
01、介绍
02、操作符 +
03、strings.Join ⽅法
04、fmt.Sprint ⽅法
05、bytes.Buffer 类型
06、strings.Builder 类型
07、总结
01、介绍
在编程语⾔中,字符串是⼀种重要的数据结构。在 Golang 语⾔中,因为字符串只能被访问,不能被修改,所以,如果我们在Golang 语⾔中进⾏字符串拼接操作,Golang 需要进⾏内存拷贝。
如果读者朋友们了解过 Golang 语⾔内存管理的相关知识,就会知道内存拷贝会带来性能消耗。在 Golang 语⾔中,提供了多种字符串拼接的⽅式,为了降低我们编写的程序性能损耗,本⽂我们介绍⼀下每种字符串拼接⽅式的特点,从⽽学会根据不同场景选择性能最好的字符串拼接⽅式。
02、操作符 +
使⽤操作符 + 拼接字符串,是最简单的⼀种字符串拼接⽅式,它的特点是可读性强,但是性能⼀般,因为每次拼接,都涉及内存拷贝,需要分配⼀块新内存,并且该⽅式也仅适⽤于字符串类型的变量。所以,该⽅式适⽤于少量字符串类型的变量进⾏字符串拼接的场景。
⽰例代码:
str := "a" + "b" + "c"
03、strings.Join ⽅法
标准库 strings 中的 Join ⽅法,该⽅式只能⽤于拼接字符串类型的切⽚,将字符串类型的切⽚中的每个元素拼接为⼀个字符串,适⽤于拼接字符串类型切⽚中的元素的场景。
⽰例代码:
s := []string{"a", "b", "c"}
str := strings.Join(s, ", ")
04、fmt.Sprint ⽅法
标准库 fmt 中的 Sprint,Sprintf 和 Sprintln ⽅法,也是⽐较常⽤的⼀种字符串拼接⽅式,它的特点是可以拼接其它类型,涉及类型转换,底层实现使⽤ []byte 字节切⽚,但是性能⼀般,所以,该⽅式适⽤于少量包含其它⾮字符串类型变量进⾏字符串拼接的场景。
⽰例代码:
str := fmt.Sprint("a", 1, "b\r\n")
str1 := fmt.Sprintf("name:%s,age=%d.\r\n", "lucy", 17)
str2 := fmt.Sprintln("a", 1, "b")
05、bytes.Buffer 类型
标准库 bytes 中的 Buffer 类型,该类型中 WriteString ⽅法和 String ⽅法配合使⽤,也可以实现字符串
拼接,它的特点是可以拼接字符串、字符和 Unicode,底层实现使⽤ []byte,但是涉及 string 和 []byte 之间的转换,性能⼀般,因为 WriteString ⽅法使⽤的 buffer 太长,会导致 panic,所以,该⽅式适⽤于少量字符变量和字符串变量进⾏字符串拼接的场景。
⽰例代码:
var b bytes.Buffer
b.WriteString("My ")
b.WriteString("name ")
b.WriteString("is ")
b.WriteString("lucy.")
str := b.String()
06、strings.Builder 类型
标准库 strings 中的 Builder 类型,该类型中 WriteString ⽅法和 String ⽅法配合使⽤,也可以实现字符
串拼接,使⽤⽅式和bytes.Buffer 相同,可以拼接字符串、字符和 Unicode,也会涉及 string 和 []byte 之间的转换,但是,它使⽤ unsafe.Pointer 优化了 string 和 []byte 之间的转换,所以,在⼤量字符串拼接的场景,推荐使⽤该种⽅式。
⽰例代码:
var b bytes.Builer
b.WriteString("My ")
b.WriteString("name ")
b.WriteString("is ")
b.WriteString("lucy.")
str := b.String()
07、总结
本⽂我们介绍了 Golang 语⾔中的 5 种字符串拼接⽅式,相信读者朋友们已经了解每种⽅式适合使⽤的
场景。最后,我再做个简要总结。
在少量仅有字符串类型的变量拼接字符串时,并且对性能要求不⾼的场景,推荐使⽤操作符 + 的⽅式;
go语言字符串转数组在字符串类型切⽚中的元素拼接字符串时,推荐使⽤ strings.Join ⽅式;
在少量多种类型变量拼接字符串时,推荐使⽤ fmt.Sprint 的⽅式;
在少量字符串、字符和 Unicode 拼接字符串时,并且对性能有⼀定要求的场景,推荐使⽤ buyes.Buffer 的⽅式;
在⼤量字符串、字符和 Unicode 拼接字符串时。并且对性能有⼀定要求的场景,推荐使⽤ strings.Builder 的⽅式。
到此这篇关于Golang语⾔如何⾼效拼接字符串的⽂章就介绍到这了,更多相关Golang⾼效拼接字符串内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论