go中rune和byte的用处

参考:https://www.jianshu.com/p/4fbf529926ca

rune是用来区分字符值和整数值的

  • byte 等同于int8,即一个字节长度,常用来处理ascii字符
  • rune 等同于int32,即4个字节长度,常用来处理unicode或utf-8字符

举例说明:

package main

import (
    "fmt"
)


func main() {
    str := "你好 world"
    fmt.Printf("len(str):%d\n", len(str)) //返回len(str):12
}

返回值为12是因为中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。

所以上面例子中的"你好"占据了六个字节

但是其实我们期望得到的结果是8,即不以字节数来计算长度,而是以字符数来计算长度

解决的办法就是将该string转成rune类型,rune类型为int32,即4个字节,能够很好地将utf-8编码下三字节长度的中文字符保存进来,这样就能够得到长度为8的值了

package main

import (
    "fmt"
)


func main() {
    str := "你好 world"
    fmt.Printf("len(str):%d\n", len(str)) //返回len(str):12
    fmt.Printf("len(rune(str)):%d\n", len([]rune(str))) //len(rune(str)):8
}

同理可知,其实byte也是为了解决字符的问题,只是它是用来解决ascii字符的,所以长度短一些,为int8

 

posted @ 2019-03-20 22:46  慢行厚积  阅读(3235)  评论(0编辑  收藏  举报