字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。UTF-8 是被广泛使用的编码格式,是文本文件的标准编码,其它包括 XML 和 JSON 在内,也都使用该编码。由于该编码对占用字节长度的不定性,Go 中的字符串里面的字符也可能根据需要占用 1 至 4 个字节,这与其它语言如 C++、Java 或者 Python 不同(Java 始终使用 2 个字节)。Go 这样做的好处是不仅减少了内存和硬盘空间占用,同时也不用像其它语言那样需要对使用 UTF-8 字符集的文本进行编码和解码。
字符串是一种值类型,且值不可变,即创建某个文本后你无法再次修改这个文本的内容;更深入地讲,字符串是字节的定长数组。
Go 支持以下 2 种形式的字面值:
-
解释字符串:
该类字符串使用双引号括起来,其中的相关的转义字符将被替换,这些转义字符包括:
\n
:换行符\r
:回车符\t
:tab 键\u
或\U
:Unicode 字符\\
:反斜杠自身
-
非解释字符串:
该类字符串使用反引号括起来,支持换行,例如:
`This is a raw string \n` 中的 `\n\` 会被原样输出。
和 C/C++不一样,Go 中的字符串是根据长度限定,而非特殊字符 \0
。
string
类型的零值为长度为零的字符串,即空字符串 ""
。
一般的比较运算符(==
、!=
、<
、<=
、>=
、>
)通过在内存中按字节比较来实现字符串的对比。你可以通过函数 len()
来获取字符串所占的字节长度,例如:len(str)
。
字符串的内容(纯字节)可以通过标准索引法来获取,在中括号 []
内写入索引,索引从 0 开始计数:
- 字符串
str
的第 1 个字节:str[0]
- 第
i
个字节:str[i - 1]
- 最后 1 个字节:
str[len(str)-1]
需要注意的是,这种转换方案只对纯 ASCII 码的字符串有效。
注意事项 获取字符串中某个字节的地址的行为是非法的,例如:&str[i]
。
字符串拼接符 +
两个字符串 s1
和 s2
可以通过 s := s1 + s2
拼接在一起。
s2
追加在 s1
尾部并生成一个新的字符串 s
。
你可以通过以下方式来对代码中多行的字符串进行拼接:
str := "Beginning of the string " + "second part of the string"
由于编译器行尾自动补全分号的缘故,加号 +
必须放在第一行。
拼接的简写形式 +=
也可以用于字符串:
s := "hel" + "lo," s += "world!" fmt.Println(s) //输出 “hello, world!”
在循环中使用加号 +
拼接字符串并不是最高效的做法,更好的办法是使用函数 strings.Join()
,有没有更好的办法了?有!使用字节缓冲(bytes.Buffer
)拼接更加给力!
在后面,我们会讲到通过将字符串看作是字节 (byte
) 的切片 (slice) 来实现对其标准索引法的操作。会讲到 for
循环只会根据索引返回字符串中的纯字节,而在后面将会展示如何使用 for-range 循环来实现对 Unicode 字符串的迭代操作。在下一节,我们会学习到许多有关字符串操作的函数和方法,同时 fmt
包中的 fmt.Sprint(x)
也可以格式化生成并返回你所需要的字符串。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」