本文简明地梳理golang中和字符相关的最常用概念,给萌新gopher树立正确的观念.
byte 字节
- byte是一个字节,是uint8的别名
- 1Byte=8bit,是信息表示的最小单位.
Unicode编码
- golang采用的是unicode编码
- unicode是变长编码,长度范围是1-4字节
- 单字节编码的就是ascII的255个字符
- 汉字3字节
string 字符串
- string底层是一个const的[]byte.
- 对于string str,
- str[i]取出的是第i个byte,
- str[i:j]取出的是第i到j-1个字节形成的string,
rune 码点
- rune是int32的别名,因为rune最多4byte=32bit
- rune是一个unicode的码点,也可以理解为golang的字符类型
- 对于数字字母而言对应的byte和rune值一样,因为是单字节编码的
- 对于汉字就不一样了,一个汉字可由1个rune,或者3个byte表示
字符串操作 和 string,[]byte,[]rune
- string是不可改变的,如果要做字符串操作
- 当字符串只有数字字母,可以转化成[]byte或者[]rune
- 当有汉字等多字节编码的就必须转化成[]rune
- 当然,最通用的做法就是转化成[]rune
字符串/字符操作相关的包
- strings
- 顾名思义,和字符串相关
- 例如trim,split,hasprefix...
- unicode
- 和码点相关的操作
- 之前解释过unicode码点就是golang的字符
- 例如 isletter,isdigit...