Go语言中的rune类型浅析

Posted goback20170622

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)))


以上是关于Go语言中的rune类型浅析的主要内容,如果未能解决你的问题,请参考以下文章

5.5 Go语言中的类型转换

5.5 Go语言中的类型转换

Go语言字符串

Go语言string和byte以及rune

Go语言入门-流程控制

Go语言 unsafe.Pointer 浅析