Go语言中的rune类型浅析

rune是Go语言中一种特殊的数据类型,它是int32的别名,几乎在所有方面等同于int32,用于区分字符值和整数值

 1 package main
 2 
 3 import "fmt"
 4 
 5 func main() {
 6 
 7     var str = "hello 世界"
 8     fmt.Println("len(str):", len(str))
 9 
10 }

这段代码的执行结果为:

len(str):12

从字符串字面值看len(str)的结果应该是8,但在Golang中string类型的底层是通过byte数组实现的,在unicode编码中,中文字符占两个字节,而在utf-8编码中,中文字符占三个字节而Golang的默认编码正是utf-8.

如果想要获得真实的字符串长度而不是其所占用字节数,有两种方法实现

方法一:

使用unicode/utf-8包中的RuneCountInString方法

str := "hello 世界"
fmt.Println("RuneCountInString:", utf8.RuneCountInString(str))

方法二:

将字符串转换为rune类型的数组再计算长度

str := "hello 世界"
fmt.Println("rune:", len([]rune(str)))

猜你喜欢

转载自www.cnblogs.com/goback20170622/p/10306781.html
今日推荐