本人在阅读《Go程序设计语言》时,通过比较Java和Go的不同来快速掌握Go语言,这是第二篇。
基本数据
本章的主题是基础类型:数字、字符串和布尔类型。
整数
和Java不同的是,Go同时具备符号整数和无符号整数:int8、int16、int32、int64以及uint8、uint16、uint32、uint64;
Go还提供int和uint,它们的大小取决于所处的硬件平台和使用的编译器,在本人的机器上测试:
|
|
输出为:
|
|
各占8个字节。
rune和byte分别是int32和uint8的同义词,所谓同义词就是它们满足前面提到的可赋值性:
|
|
输出结果是:
|
|
Go还存在一种无符号整数uintptr,它的大小不定,但可以存放指针;
和Java不一样的是,Go的取模运算符%
只能用于整数;
Go没有>>>
位运算符;
浮点数
和Java不一样的是,Go具有两种大小的浮点数float32和float64,他们的最大值分别是math.MaxFloat32和math.MaxFloat64,绝大多数情况优先使用float64,因为float32会迅速累计误差;
和Java一样,浮点数可写成小数形式,小数点前的数字可以省略,后面也可以省略:
|
|
在Go中正无穷大和负无穷大分别用+Inf和-Inf来表示,在Java中则用Infinity和-Infinity表示;
在Go中用代表0值的变量作为分母进行运算,得到的结果是NaN;
复数
略。
布尔值
和Java一样,&&
表示逻辑乘法,||
表示逻辑加法;
布尔值无法隐式转换成数值(0或1),需要手写函数变换:
|
|
字符串
和Java不同,由于Go的变量声明存在零值机制,在没有手动初始化之前,字符串变量默认为""
;
在Go中,子串生成操作s[i:j]产生新字符串,如果下标越界可以躲过IDE的检查,但是运行会触发宕机异常;
加号运算符可以连接两个字符串生成新的字符串;
Go提供了原生的字符串字面量的书写形式:`…`,例如:
|
|
输出为:
|
|