-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46569
- shell命令
-
- 文章:(42)篇
- 阅读:154244
- Git教程
-
- 文章:(36)篇
- 阅读:234884
- leetCode刷题
-
- 文章:(76)篇
- 阅读:131873
-
go语言中的rune数据类型2019-02-16 19:00 阅读(5043) 评论(0)
一、简介
在看go项目的时候,发现里面使用了到rune类型,官方的解释如下:
// rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from integer values. type rune = int32
rune是int32的一个别名,在大多方面,等同于int32
一般用来区分字符值和整数值。
仅仅看上面的说明,可能还是一脸懵逼。我们来通过一个简单的例子看看rune,如下,应该输出什么呢?
package main import ( "fmt" ) func main() { var username string = `dequan,你好` fmt.Println(len(username)) }
可能我们猜测是9,正确答案是13.
为什么呢?
golang中string底层是通过byte数组实现的。英文字符占1个字节,中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。
byte 等同于int8,常用来处理ascii字符
rune 等同于int32,常用来处理unicode或utf-8字符
那么,如何才能获取字符串中的字符长度,而不是字节长度呢?
这个时候,就需要利用rune类型了。
package main import ( "fmt" "unicode/utf8" ) func main() { var username string = `dequan,你好` //golang中的unicode/utf8包提供了用utf-8获取长度的方法 fmt.Println(utf8.RuneCountInString(username)) //将字符串转为rune数组,然后计算数组的长度 fmt.Println(len([]rune(username))) }