Go 语言中的整数¶
Go 提供了 10 种类型用于表示整数, 它们被统称为整数类型(integer)。 整数类型不能存储分数, 也不会出现浮点类型的精度问题, 但因为每种整数类型的取值范围都各不相同, 所以我们应该根据场景所需的取值范围来决定使用何种整数类型。
在 Go 提供的众多整数类型当中,
有 5 种整数类型是有符号(signed)的,
这意味着它们既可以表示正整数,
又可以表示负整数。
在这些整数类型中,
最常用的莫过于代表有符号整数的 int 类型了:
var year int = 2018
除有符号整数之外,
Go 还提供了 5 种只能表示正整数的无符号(unsigned)整数类型,
其中的典型为 uint 类型:
var month uint = 2
因为 Go 在进行类型推断的时候总是会选择 int 类型作为整数值的类型,
所以下面这 3 行代码的意义是完全相同的:
year := 2018
var year = 2018
var year int = 2018
为不同场合而设的整数类型¶
无论是有符号整数还是无符号整数, 它们都有各种不同大小(size)的类型可供选择, 而不同大小又会影响它们自身的取值范围以及内存占用。 表 7-1 列出了 8 种与计算机架构无关的整数类型, 以及这些类型需要占用的内存大小。
表 7-1 与计算机架构无关的整数类型
正如表 7-1 所示, Go 提供了非常多的整数类型可供选择。 本章稍后将会介绍其中一些类型的应用场景, 并说明当程序超出类型的有效取值范围时会发生什么事情。
因为 int 类型和 uint 类型会根据目标硬件选择最合适的位长,
所以它们未被包含在 表 7-1 里面。
举个例子,
在诸如 Go Playground、Raspberry Pi 2 和旧款手机等 32 位架构上,
int 和 uint 都是 32 位值,
而较新的计算机都基于 64 位架构,
所以这些架构上的 int 和 uint 都是 64 位值。
