[golang]字符串拼接

简介: [golang]字符串拼接

前言

在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

标准库 fmt 中的 Sprint,Sprintf 和 Sprintln 方法,也是比较常用的一种字符串拼接方式,它的特点是可以拼接其它类型,涉及类型转换,底层实现使用 []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类型

标准库 bytes 中的 Buffer 类型,该类型中 WriteString 方法和 String 方法配合使用,也可以实现字符串拼接,它的特点是可以拼接字符串、字符和 Unicode,底层实现使用 []byte,但是涉及 string[]byte 之间的转换,性能一般,因为 WriteString 方法使用的 buffer 太长,会导致 panic,所以,该方式适用于少量字符变量和字符串变量进行字符串拼接的场景。

示例代码:

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 类型

标准库 strings 中的 Builder 类型,该类型中 WriteString 方法和 String 方法配合使用,也可以实现字符串拼接,使用方式和 bytes.Buffer 相同,可以拼接字符串、字符和 Unicode,也会涉及 string[]byte 之间的转换,但是,它使用 unsafe.Pointer 优化了 string[]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.
相关文章
|
6月前
|
Go
golang力扣leetcode 467.环绕字符串中唯一的子字符串
golang力扣leetcode 467.环绕字符串中唯一的子字符串
45 0
|
6月前
|
Go
golang力扣leetcode 438.找到字符串中所有字母异位词
golang力扣leetcode 438.找到字符串中所有字母异位词
36 0
|
2月前
|
Go
Golang语言基本数据类型默认值及字符串之间互相转换案例
这篇文章讲解了Golang语言中基本数据类型的默认值、类型转换的概述以及整型、浮点型、字符串之间的相互转换案例,包括如何将基本数据类型转换为字符串类型和字符串类型转换为基本数据类型,以及字符串与字节切片之间的转换。
18 2
|
2月前
|
Go
Golang语言基础数据类型之字符串常用的操作
这篇文章介绍了Golang语言中字符串的定义、常用操作,包括字符串长度查看、遍历、类型转换、子串统计、比较、查找位置、替换、切割、大小写转换、剔除字符、前缀后缀判断、拼接、子串包含判断以及字符串join操作,同时提供了官方文档的查看方法。
20 1
|
3月前
|
存储 程序员 编译器
Golang 中的字符串:常见错误和最佳实践
Golang 中的字符串:常见错误和最佳实践
|
3月前
|
Go 开发者
|
5月前
|
Go
【golang】golang 字符串切片排序
【golang】golang 字符串切片排序
67 1
|
5月前
|
Go
【golang】Go 判断字符串是否包含指定字符
【golang】Go 判断字符串是否包含指定字符
77 1
|
6月前
|
存储 Go 开发者
Golang深入浅出之-Go语言字符串操作:常见函数与面试示例
【4月更文挑战第20天】Go语言字符串是不可变的字节序列,采用UTF-8编码。本文介绍了字符串基础,如拼接(`+`或`fmt.Sprintf()`)、长度与索引、切片、查找与替换(`strings`包)以及转换与修剪。常见问题包括字符串不可变性、UTF-8编码处理、切片与容量以及查找与替换的边界条件。通过理解和实践这些函数及注意事项,能提升Go语言编程能力。
182 0
|
6月前
|
Go
Golang拼接字符串性能对比
【2月更文挑战第8天】Golang拼接字符串性能对比
78 2