我们通过理解例子来测试golang的字符串循环。
首先看到字符串s="hello,我的中国"长度为18,说明每个中文占用3个字节来表示。此时按照字节长度s[i]打印中文肯定是乱码。
我们再来看一个例子:
为什么for...range可以正常打印包含中文的字符串?
我们再看一个例子:
现在我们来总结一下:go语言的len函数,统计字符串长度的时候,它的底层原来就是统计字符串占用内存的字节长度。假如这些字符串都是ascii(0-128)表示,那么字节长度==字符串长度。当字符串包含有双字节或者多字节的语言。统计字符串长度时,需要做utf8.RuneCountInString。这就解释了for s[i]为乱码的原因。for ...range是以字符串长度(实际长度,底层做过一定转换)来做循环取值。