Golang系列之字符类型基本介绍
1、基本介绍
Golang没有专门的字符类型,如果要存放单个字符,一般采用关键字byte
或者是rune
,本文主要挑byte
来讲,然后go的字符和java中的字符是一样的?在java中字符串是用字符拼接成的字符序列,而golang中字符串不是由字符构成的,是由字节构成的
byte:代表 UTF-8 编码中单个字节的值,是 uint8 类型的别名,占用一个字节
rune:代表单个 Unicode 字符,是 int32 类型的别名,占用4个字节
2、byte类型范围
类型 | 有无符号 | 占用存储空间大小 | 范围 | 备注 |
byte | 无 | 与uint8一样,1个字节 | 0 ~ 255 | 当要存储字符时选用byte |
3、使用注意事项
- Go语言中统一使用utf-8编码,英文字母是占用1个字节,汉字占用3个字节,utf-8编码有自己的一套编码表,查看链接:http://www.mytju.com/classcode/tools/encode_utf8.asp
- 打印一个byte定义的字符时,是打印出对应的utf-8编码值,不是具体字符
var c byte = 'a'
// 打印 , c=97,对应的utf-8编码值unicode,是不是和ASCII一样?
fmt.Println("c=" , c)
- 要打印byte定义的字符,要使用格式化打印
var c byte ='a'
// 打印, c=a
fmt.Ptinf("c=%c \n" , c).
// 给出具体unicode编码,打印字符
var n int = 21271
// 打印, n=北
fmt.printf("n=%c \n" , n)
- byte字符赋值不能超过255 unicode编码对应字符,超出要用int等类型赋值
//var c byte = '北'
var c int = '北'
// 超过255会报错,应该将byte改为int
fmt.printf("c=%c \n" ,c)
- 在go中字符类型可以进行运算,相当于一个整数,因为一个字符对应一个Unicode
var n = 10+ 'a'
// n=107
fmt.Println("n=" , n)
ASCII编码和UTF-8编码对比,ASCII编码包含了 33 个控制字符和 95 个可显示字符,可以理解为UTF-8编码是兼容ASCII编码的,UTF-8编码里包括了ASCII编码的字符编码,还进行了拓展,以适应国际化的发展
4、go中的字符本质
在go语言中,字符存储原理:
存储:字符->对应编码unicode->二进制
读取:二进制->unicode编码->字符