22

Go 语言中的整数

 4 years ago
source link: http://blog.huangz.me/2020/integers-in-go.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Note

本文摘录自《Go语言趣学指南》第 7 章, 请访问 gpwgcn.com 以获取更多相关信息。

bmy2Qj3.jpg!web

Go 提供了 10 种类型用于表示整数, 它们被统称为 整数类型 (integer)。 整数类型不能存储分数, 也不会出现浮点类型的精度问题, 但因为每种整数类型的取值范围都各不相同, 所以我们应该根据场景所需的取值范围来决定使用何种整数类型。

在 Go 提供的众多整数类型当中, 有 5 种整数类型是 有符号 (signed)的, 这意味着它们既可以表示正整数, 又可以表示负整数。 在这些整数类型中, 最常用的莫过于代表有符号整数的 int 类型了:

36VvemA.png!web
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 与计算机架构无关的整数类型

aaq2y2E.png!web

正如表 7-1 所示, Go 提供了非常多的整数类型可供选择。 本章稍后将会介绍其中一些类型的应用场景, 并说明当程序超出类型的有效取值范围时会发生什么事情。

因为 int 类型和 uint 类型会根据目标硬件选择最合适的位长, 所以它们未被包含在 表 7-1 里面。 举个例子, 在诸如 Go Playground、Raspberry Pi 2 和旧款手机等 32 位架构上, intuint 都是 32 位值, 而较新的计算机都基于 64 位架构, 所以这些架构上的 intuint 都是 64 位值。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK