0
点赞
收藏
分享

微信扫一扫

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

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

func main() {
var s string = "hello,我的中国"
var len int = len(s)
fmt.Println(len)

for i := 0; i < len; i++ {
fmt.Printf("%c", s[i])
}
}

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

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

我们再来看一个例子:

func main() {
var s string = "hello,我的中国"
var len int = len(s)
fmt.Println(len)

for _, v := range s {
fmt.Printf("%c", v)
}
}

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

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


我们再看一个例子:

package main

import (
"fmt"
"unicode/utf8"
)

func main() {
var s string = "hello,我的中国"
//len计算字符串占用字节长度
var len int = len(s)
//计算字符串长度(包含全世界语言)
var utf8Len int = utf8.RuneCountInString(s)

fmt.Println("占用字节长度:", len)
fmt.Println("字符串的长度:", utf8Len)

for _, v := range s {
fmt.Printf("%c", v)
}
}

golang的循环String类型---for range_i++_03

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


举报

相关推荐

0 条评论