Last updated on 2022年2月16日
一、基本介绍
1、Go中没有专门的字符类型,如果要储存单个字符(字母),一般使用byte来保存;
2、Go语言中的字符使用UTF-8编码实现;
3、特征:传统语言的字符串是由字符组成,但是Go的字符串是由字节组成;
func main() {
var c1 byte = 'a'
var c2 byte = '0'
*//当我们直接输出byte值时,就是输出了对应的字符码值*
fmt.Println(c1, c2) *//97, 48*
*//如果需要输出原字符,需要使用格式化输出*
fmt.Printf("c1=%c c2=%c", c1, c2) *//c1=a c2=0*
}
如果我们保存的字符在ASCII表中,比如「0-9,a-z,A-Z,某些符号」,可以直接用byte保存;
4、对于汉字字符的一些情况
var c3 byte = '中'
fmt.Println(c3) *//错误,溢出了byte类型(255)的范围*
var c5 int = '中'
fmt.Println(c5) *//20013*
注:byte等于uint8无符号整数,汉字在Unicode编码(十进制)中为正数字符,所以byte可以储存单个的汉字,但是,某些汉字可能超出了byte(或者是uint8的范围),所以可以采用更大的类型来储存,比如 uint32、uint64、int等;
二、细节说明
1、在Go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值;
2、字符类型是可以运算的,因为相当于一个整数,它们都有对应的Unicode编码;
var c7 = 10 + 'a' *// 10 + 97*
fmt.Println(c7) *//107
*
var c8 = 'a' + 'a' *// 97 + 97*
fmt.Println(c8) *//194
*
3、码值和汉字之间是可以互相转换的
var c6 int = 20013
fmt.Printf("%c", c6) *//中*
4、在UTF-8中,英文字母1个字节,汉字3个字节
三、本质探讨
1、字符储存在计算机中的和取出的过程
储存:字符 -> 对应码值 -> 二进制 -> 储存
读取:二进制 -> 码值 -> 字符 -> 读取