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编码->字符