Skip to content

Commit e08c492

Browse files
committed
docs: update string types
1 parent 99988eb commit e08c492

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

src/essential/base/62.string.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
---
2-
date: 2022-08-20
2+
date: 2026-01-21
33
---
44

55
# 字符串
66

7-
在 Go 中,字符串本质上是一个不可变的只读的字节数组,也是一片连续的内存空间
7+
在 Go 中,字符串本质上是一个不可变的、只读的字节序列(byte sequence),这里“字节序列”指的是字符串的底层数据由一串按顺序排列的字节组成,这些字节占用一片连续的内存空间
88

99
## 字面量
1010

@@ -48,7 +48,7 @@ opqrst \uvwxyz
4848

4949
## 访问
5050

51-
因为字符串本质是字节数组,所以字符串的访问形式跟数组切片完全一致,例如访问字符串第一个元素
51+
因为字符串本质是字节序列,其索引操作`str[i]`被设计为返回第 i 个字节,语法上与切片一致,例如访问字符串第一个元素
5252

5353
```go
5454
func main() {
@@ -57,7 +57,7 @@ func main() {
5757
}
5858
```
5959

60-
输出是字节而不是字符
60+
输出是字节编码值而不是字符
6161

6262
```
6363
116
@@ -106,7 +106,7 @@ that is a string
106106

107107
## 转换
108108

109-
字符串可以转换为字节切片,而字节切片或字节数组也可以转换为字符串,例子如下:
109+
字符串可以转换为字节切片,而字节切片或字节序列也可以转换为字符串,例子如下:
110110

111111
```go
112112
func main() {
@@ -152,7 +152,7 @@ func main() {
152152

153153
## 长度
154154

155-
字符串的长度,其实并不是字面量的长度,而是字节数组的长度,只是大多数时候都是`ANSCII`字符,刚好能用一个字节表示,所以恰好与字面量长度相等,求字符串长度使用内置函数`len`,例子如下:
155+
字符串的长度,其实并不是字符的个数,而是字节序列的长度。只是大多数时候我们处理的是 ASCII 字符,每个字符恰好能用一个字节表示,所以字节长度与字符个数恰好相等。求字符串长度使用内置函数`len`,例子如下:
156156

157157
```go
158158
func main() {
@@ -180,7 +180,7 @@ func main() {
180180

181181
```
182182
t // 字母t
183-
è // 意大利语
183+
è // 一个中文字符的“碎片”(第一个字节)的编码值,碰巧与意大利语字符 è 的编码值相同
184184
这 // 中文汉字
185185
```
186186

@@ -308,7 +308,7 @@ func main() {
308308
33,21,!
309309
```
310310

311-
按照字节来遍历会把中文字符拆开,这显然会出现乱码。Go 字符串是明确支持 utf8 的,应对这种情况就需要用到`rune`类型,在使用`for range`进行遍历时,其默认的遍历单位类型就是一个`rune`,例如下方代码
311+
按照字节来遍历会把中文字符拆开,这显然会出现乱码。Go 字符串是明确支持 UTF-8 的,应对这种情况就需要用到`rune`类型,在使用`for range`进行遍历时,其默认的遍历单位类型就是一个`rune`,例如下方代码
312312

313313
```go
314314
func main() {
@@ -333,7 +333,7 @@ func main() {
333333
33,21,!
334334
```
335335

336-
`rune`本质上是`int32`的类型别名,unicode 字符集的范围位于 0x0000 - 0x10FFFF 之间,最大也只有三个字节,合法的 UTF8 编码最大字节数只有 4 个字节,所以使用`int32`来存储是理所当然,上述例子中将字符串转换成`[]rune`再遍历也是一样的道理,如下
336+
`rune`本质上是`int32`的类型别名,unicode 字符集的范围位于 0x0000 - 0x10FFFF 之间,最大也只有三个字节,合法的 UTF-8 编码最大字节数只有 4 个字节,所以使用`int32`来存储是理所当然,上述例子中将字符串转换成`[]rune`再遍历也是一样的道理,如下
337337

338338
```go
339339
func main() {
@@ -345,7 +345,7 @@ func main() {
345345
}
346346
```
347347

348-
还可以使用`uft8`包下的工具,例如
348+
还可以使用`utf8`包下的工具,例如
349349

350350
```go
351351
func main() {

0 commit comments

Comments
 (0)