Golang 语言怎么高效拼接字符串?
发布于 2021-11-04 14:30 ,所属分类:软件编程学习资料
大家好,我是 frank。
欢迎大家点击标题下方蓝色文字「Golang 语言开发栈」gongzhong号。
设为星标,第一时间接收推送文章。
文末,加群一起学 Golang 语言。
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,所以,该方式适用于少量字符变量和字符串变量进行字符串拼接的场景。
示例代码:
varbbytes.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 之间的转换,所以,在大量字符串拼接的场景,推荐使用该种方式。
示例代码:
varbbytes.Builer
b.WriteString("My")
b.WriteString("name")
b.WriteString("is")
b.WriteString("lucy.")
str:=b.String()
07
总结
本文我们介绍了 Golang 语言中的 5 种字符串拼接方式,相信读者朋友们已经了解每种方式适合使用的场景。最后,我再做个简要总结。
在少量仅有字符串类型的变量拼接字符串时,并且对性能要求不高的场景,推荐使用操作符 +的方式;在字符串类型切片中的元素拼接字符串时,推荐使用 strings.Join方式;在少量多种类型变量拼接字符串时,推荐使用 fmt.Sprint的方式;在少量字符串、字符和 Unicode 拼接字符串时,并且对性能有一定要求的场景,推荐使用 buyes.Buffer的方式;在大量字符串、字符和 Unicode 拼接字符串时。并且对性能有一定要求的场景,推荐使用 strings.Builder的方式。
推荐阅读:
Golang 语言怎么编写测试代码?
Golang 语言中的 defer 怎么使用?
Golang 语言怎么使用 net/http 标准库开发 http 应用?
Golang 语言中怎么拦截系统信号和优雅退出 http server?
Golang 语言中 Context 的使用方式
参考资料:
https://pkg.go.dev/strings@go1.17.2#Join
https://pkg.go.dev/fmt@go1.17.2#Sprint
https://pkg.go.dev/bytes@go1.17.2#Buffer
https://pkg.go.dev/strings@go1.17.2#Builder

扫描ErWeiMa或回复「群」,加入群

点「赞」和「在看」是最大的支持


![[Python] 某在线直播平台 python基础视频教程(全21集)主要讲解运算符用法 字符串示例 列表](https://static.kouhao8.com/sucaidashi/xkbb/ea8bf1e8ef7957e6802322d8ef7b4782.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)








![[视频教程] golang 入门到精通](https://static.kouhao8.com/sucaidashi/xkbb/e842684397e882f374ce618ef1e850dd.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[区块链技术] Golang公链开发实战课程 GO语言区块链开发技术课程 区块链开发技术全新实战视频教程](https://static.kouhao8.com/sucaidashi/xkbb/e818fa7fb61980136226423548dcfeba.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)



![[自动化] 2017 怎么基于python实现接口自动化 视频+文档](https://static.kouhao8.com/sucaidashi/xkbb/8e63050d4d3b2deaddefff89e0a5a66c.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[就业指导] PHP程序员就业指导-新手怎么打造PHP程序员简历教程](https://static.kouhao8.com/sucaidashi/xkbb/c0c5831f4d8951553b4d805b35ded44b.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[R语言] R语言数据分析全套视频教程 R语言高级进阶篇课程 炼数成金R语言视频教程](https://static.kouhao8.com/sucaidashi/xkbb/ff24ea3604353362b6f96d6ef711ca4e.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)
![[C语言] 猎豹网校 大家可以学的C语言 C语言学习视频教程](https://static.kouhao8.com/sucaidashi/xkbb/78fbbb5e62c6788c5d85a59af3843e03.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[C语言] C语言基础-潘老师 千锋3G学院-C语言基础视频教程](https://static.kouhao8.com/sucaidashi/xkbb/e64d0f4b82b80d69435dd0e26fe4cdb8.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)
![[R语言] 完美诠释R语言 炼数成金-数据分析展现与R语言15周完整版 R语言视频教程](https://static.kouhao8.com/sucaidashi/xkbb/bf27384bab96de93e97267e7ccde8e91.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)
![[R语言] 尚学堂大数据之R语言速成实战视频课程 尚学堂R语言教程](https://static.kouhao8.com/sucaidashi/xkbb/b9148172888b966279d278caf637bd11.png?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)
相关资源