我们通过理解例子来测试golang的字符串循环。

golang的循环String类型---for range_字符串

首先看到字符串s="hello,我的中国"长度为18,说明每个中文占用3个字节来表示。此时按照字节长度s[i]打印中文肯定是乱码。

我们再来看一个例子:

golang的循环String类型---for range_字符串长度_02

为什么for...range可以正常打印包含中文的字符串?


我们再看一个例子:

golang的循环String类型---for range_for_03

现在我们来总结一下:go语言的len函数,统计字符串长度的时候,它的底层原来就是统计字符串占用内存的字节长度。假如这些字符串都是ascii(0-128)表示,那么字节长度==字符串长度。当字符串包含有双字节或者多字节的语言。统计字符串长度时,需要做utf8.RuneCountInString。这就解释了for s[i]为乱码的原因。for ...range是以字符串长度(实际长度,底层做过一定转换)来做循环取值。