跳到主要内容

Go 字符串处理

术语

术语英文描述备注
Bit二进制数字,0 或 1计算机中的最小数据单位
字节Byte通常由 8 个位组成计算机中的标准数据块
字符Char代表一个文本字符在不同的编码中,可能占用不同数量的字节
比特Bit同“位”

获取字符串长度

在 Go 语言中,可以使用len()函数获取字符串的字节长度。

text := "admin"

length := len(text)
fmt.Println(length) // 输出: 5

注意,len()函数返回的是字节长度而非字符数量。当字符串包含中文字符时,每个中文字符通常占用 3 个字节。

text := "中文"
length := len(text)
fmt.Println(length) // 输出: 6

虽然"中文"包含 2 个字符,但len(text)返回 6,因为每个中文字符占 3 个字节。

切片后获取长度

将字符串转换为字节切片后,可以再次使用len()函数获取长度。

text := "i am go"
bytes := []byte(text)
fmt.Println(bytes) // 输出: [105 32 97 109 32 103 111]
fmt.Println(len(bytes)) // 输出: 7

获取字符串的字符长度

要获取字符串中的字符数量,可以将字符串转换为[]rune切片。

text := "好好学习"
bytes := []byte(text)
runes := []rune(text)

fmt.Println(len(bytes)) // 输出: 12
fmt.Println(len(runes)) // 输出: 4

len(bytes)返回字节数,而len(runes)返回字符数。这在处理包含多字节字符的字符串时非常有用。

转义字符

在 Go 语言中,字符串可以使用转义字符来表示特殊字符。常用的转义字符如下:

转义序列含义示例
\n换行符fmt.Println("Hello\nWorld")
\r回车符fmt.Println("Hello\rWorld")
\t制表符(水平)fmt.Println("Hello\tWorld")
\'单引号fmt.Println('\'Hello\'')
\"双引号fmt.Println("\"Hello\"")
\\反斜杠本身fmt.Println("Hello\\World")
\a报警铃声fmt.Println("Hello\aWorld")
\b退格键fmt.Println("Hello\bWorld")
\f换页符fmt.Println("Hello\fWorld")
\v垂直制表符fmt.Println("Hello\vWorld")
\0空字符fmt.Println("Hello\0World")
\xhh以两位十六进制数表示的字符fmt.Println("Hello\x0AWorld")
\uhhhh以四位十六进制数表示的 Unicode 字符fmt.Println("Hello\u00A9World")
\Uhhhhhhhh以八位十六进制数表示的 Unicode 字符fmt.Println("Hello\U0001F601World")

使用反引号定义的原生字符串时,不会处理转义字符。

fmt.Println("他说:\"穷是原罪\"") // 输出: 他说:"穷是原罪"

fmt.Println(`他说:"穷是原罪"`) // 输出: 他说:"穷是原罪"