小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
一个字符串是一个不可改变的字节序列。字符串可以包含任意的数据,包括 byte 值 0,但是通常是用来包含人类可读的文本。文本字符串通常被解释为采用 UTF8 编码的 Unicode 码点(rune)序列。
操作
+操作符将两个字符串连接构造一个新字符串:
fmt.Println("goodbye" + s[5:]) // "goodbye, world"
复制代码
内置的 len 函数可以返回一个字符串中的字节数目(不是 rune 字符数目),索引操作 s[i]返回第 i 个字节的字节值,i 必须满足 0 ≤ i< len(s)条件约束。
s := "hello, world"
fmt.Println(len(s)) // "12"
fmt.Println(s[0], s[7]) // "104 119" ('h' and 'w')
// 如果试图访问超出字符串索引范围的字节将会导致panic异常
c := s[len(s)] // panic: index out of range
因为字符串是不可修改的,因此尝试修改字符串内部数据的操作也是被禁止的:
s[0] = 'L' // compile error: cannot assign to s[0]
字符串面值
字符串值也可以用字符串面值方式编写,只要将一系列字节序列包含在双引号内即可:
"Hello, 世界"
因为 Go 语言源文件总是用 UTF8 编码,并且 Go 语言的文本字符串也以 UTF8 编码的方式处理,因此我们可以将 Unicode 码点也写到字符串面值中。
UTF-8
UTF8 编码使用 1 到 4 个字节来表示每个 Unicode 码点,ASCII 部分字符只使用 1 个字节,常用字符部分使用 2 或 3 个字节表示。
Go 语言的 range 循环在处理字符串的时候,会自动隐式解码 UTF8 字符串
for i, r := range "Hello, 世界" {
fmt.Printf("%d\t%q\t%d\n", i, r, r)
}
- END -
作者:架构精进之路,十年研发风雨路,大厂架构师,CSDN 博客专家,专注架构技术沉淀学习及分享,职业与认知升级,坚持分享接地气儿的干货文章,期待与你一起成长。
关注并私信我回复“01”,送你一份程序员成长进阶大礼包,欢迎勾搭。
Thanks for reading!