字符、字符串以及布尔类型
因为字符与布尔类型内容相对来说较少,就和字符串类型放在了一起(凑篇幅)哈哈,话不多说,接下来一个个看。
字符类型
在Go语言中,实际上字符类型是并不存在的,个人猜测是因为Go语言崇尚精简,为了省下几个关键字。而实际上,Go语言的byte类型其实就是int类型。接下来我们通过例子来看:
var char1 byte='0'
char2:='风'
fmt.Printf("char1=%c,char1=%T\n",char1,char1)
fmt.Printf("char2=%c,char2=%T\n",char2,char2)
代码中我们分别输出了char1和char2的值和类型,来看运行结果:
char1=0,char1=uint8
char2=风,char2=int32
可以看到,char1的类型为uint8,而char2的类型为int32,由此我们可以看出byte类型实际上就是int类型。归纳一下,可以说:当存放单个字符(比如上面的char1)时,使用的是unit8类型,而存放中文、日文等字符时(上面的char2),使用的就是int32类型了,而这里的int32类型其实是另一种整形rune类型,该类型几乎可以等价于int32类型,而官方对它的描述是:
翻译一下就是:
rune是int32的别名,在所有方面都等同于int32,按照惯例,用于区分字符值和整数值,从类型上看我们也能知道,它是一个基于int32的自定义类型(这个后面会讲),实际用途还是用于区分字符和整数。
其实也很好理解为什么字符和中文字符使用的类型不一样,因为中文字符的长度已经超出了uint8所能描述的长度。而Go中的字符有几个比较特殊的地方:
- 字符和字符串使用的都是UTF-8编码,这样再也不会出现编码问题了,相信你一定碰到过自己机器上写好的项目去另一台机器上打开就乱码的问题。
- 一个字符占1个字节,这点不用说,而一个中文字符占3个字符(因为使用了UTF-8编码嘛)
当我们以数值的格式输出字符时,就会输出它们的码值(ASCII):
fmt.Printf("char1=%d,char2=%d\n",char1,char2)
运行:
char1=48,char2=39118
而我们如果对一个字符进行运算,则会出现:
fmt.Printf("加和=%d,a的编码值=%d\n",100+var1,var1)
运行:
加和=197,a的编码值=97
可以看见字符的运算实际上是码值间的运算。
字符串类型
字符串可以说是平时用的最多的类型了,Go中的字符串和其他语言差不多,接下来看。
关键字还是string,声明一个:
var string1 string
string1 ="风间天道\n"
在Go