go语言学习笔记(八)

释放双眼,带上耳机,听听看~!

对于字符串类型的被迭代值来说,for语句每次会迭代出两个值。第一个值代表第二个值在字符串中的索引,而第二个值则代表该字符串中的某一个字符。迭代是以索引递增的顺序进行的。例如,上面的for语句被执行后会在标准输出上打印出:
0: G
1: o
2: 语
5: 言
可以看到,这里迭代出的索引值并不是连续的。下面我们简单剖析一下此表象的本质。我们知道,字符串的底层是以字节数组的形式存储的。而在Go语言中,字符串到字节数组的转换是通过对其中的每个字符进行UTF-8编码来完成的。字符串”Go语言”中的每一个字符与相应的字节数组之间的对应关系如下:
go语言学习笔记(八)
注意,一个中文字符在经过UTF-8编码之后会表现为三个字节。
所以,我们用语[0]、语[1]和、语[2]分别表示字符’语’经编码后的第一、二、三个字节。对于字符’言’,我们如法炮制。
对照这张表格,我们就能够解释上面那条for语句打印出的内容了,即:每次迭代出的第一个值所代表的是第二个字符值经编码后的第一个字节在该字符串经编码后的字节数组中的索引值。
对于数组值、数组的指针值和切片之来说,range子句每次也会迭代出两个值。其中,第一个值会是第二个值在被迭代值中的索引,而第二个值则是被迭代值中的某一个元素。同样的,迭代是以索引递增的顺序进行的。

【转自慕课】https://www.imooc.com

Go

go 延迟函数 defer

2022-3-3 2:44:24

Go

GO学习笔记4-反射与转换类型

2022-3-3 2:47:14

搜索