[TOC]
Go语言的数值类型分为以下几种:`整型`、`浮点数`、`复数`。其中每一种都包含了不同大小的数值类型。例如有符号整数包含`int8`、`int16`、`int32`、`int64`等。每种数值类型都决定了对应的大小范围和是否支持正负符号。
[TOC]
Go语言同时提供了`有符号`和`无符号`的整型类型。其中包括`int8`、`int16`、`int32`和`int64`四种大小截然不同的符号整数类型,分别对应8、16、32、64bit(二进制位)大小的有符号整数、与此对应的`uint8`、`uint16`、`uint32`和`uint64`四种无符号整数类型。
[TOC]
此外还有两种整数类型`int`和`uint`,它们分别对应特定CPU平台的字长(机器字大小),其中`int`表示有符号整数,应用最为广泛,`uint`表示无符号整数。实际开发中由于编译器和计算机硬件的不同,`int`和`uint`所能表示的整数大小会在32bit或64bit之间变化。
[TOC]
大多数情况下,我们只需要` int `一种整型即可,它可以用于循环计数器(for 循环中控制循环次数的变量)、数组和切片的索引,以及任何通用目的的整型运算符,通常 int 类型的处理速度也是最快的。
[TOC]
用来表示 Unicode 字符的`rune`类型和`int32`类型是等价的,通常用于表示一个 Unicode 码点。这两个名称可以互换使用。同样,`byte`和`uint8`也是等价类型,`byte`类型一般用于强调数值是一个原始的数据而不是一个小的整数。
[TOC]
最后,还有一种无符号的整数类型`uintptr`,它没有指定具体的 bit 大小但是足以容纳指针。`uintptr`类型只有在底层编程时才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方。
[TOC]
尽管在某些特定的运行环境下 int、uint 和 uintptr 的大小可能相等,但是它们依然是不同的类型,比如 int 和 int32,虽然 int 类型的大小也可能是 32 bit,但是在需要把 int 类型当做 int32 类型使用的时候必须显示的对类型进行转换,反之亦然。
[TOC]
Go语言中有符号整数采用 2 的补码形式表示,也就是最高 bit 位用来表示符号位,一个 n-bit 的有符号数的取值范围是从 -2(n-1)到 2(n-1)-1。无符号整数的所有 bit 位都用于表示非负数,取值范围是 0 到 2n-1。例如,int8 类型整数的取值范围是从 -128 到 127,而 uint8 类型整数的取值范围是从 0 到 255。
## 哪些情况下使用int和uint
[TOC]
程序逻辑对整型范围没有特殊需求。例如,对象的长度使用内建 len() 函数返回,这个长度可以根据不同平台的字节长度进行变化。实际使用中,切片或 map 的元素数量等都可以用 int 来表示。
[TOC]
反之,在二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用 int 和 uint。
- 1.Go语言前景
- 2.Go语言环境搭建
- 3.Go语言的基本语法
- 3.1变量
- 3.1.1变量声明
- 3.1.2变量初始化
- 3.1.3多个变量同时赋值
- 3.1.4匿名变量
- 3.1.5变量的作用域
- 3.1.6整型
- 3.1.7浮点类型
- 3.1.8复数
- 3.1.9bool类型
- 3.1.10字符串
- 3.1.11字符类型
- 3.1.12类型转换
- 3.2常量
- 3.1.1const关键字
- 3.2.2模拟枚举
- 4.Go语言的流程控制
- 4.2循环结构
- 4.3键值循环
- 4.4switch语句
- 4.5goto语句
- 4.6break语句
- 4.7continue语句
- 5.Go语言的函数
- 5.1函数声明
- 5.2函数变量
- 5.3函数类型实现接口
- 5.4闭包
- 5.5可变参数
- 5.6defer(延迟执行语句)
- 5.7处理运行时错误
- 5.8宕机(panic)
- 5.9宕机恢复(recover)
- 5.10Test功能测试函数
- 6.Go语言的内置容器
- 6.1数组
- 6.2切片
- 6.3map
- 6.4sync.Map
- 6.5list
- 6.6range
- 7.Go语言的结构体
- 8.Go语言的接口
- 9.Go语言的常用内置包
- 10.Go语言的并发
- 11.Go语言的文件I/O操作
- 12.Go语言的网络编程
- 13.Go语言的反射
- 14.Go语言的数据库编程
- 15.Go语言密码学算法
- 16.Go语言的gin框架
- 17.Go语言的网络爬虫
- 18.Go语言的编译和工具链