首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
01|前世今生:你不得不了解的Go的历史和现状
02|拒绝“Hello and Bye”:Go语言的设计哲学是怎么一回事?
03|配好环境:选择一种最适合你的Go安装方法
04|初窥门径:一个Go程序的结构是怎样的?
05|标准先行:Go项目的布局标准是什么?
06|构建模式:Go是怎么解决包依赖管理问题的?
07|构建模式:Go Module的6类常规操作
08|入口函数与包初始化:搞清Go程序的执行次序
09|即学即练:构建一个Web服务就是这么简单
10|变量声明:静态语言有别于动态语言的重要特征
11|代码块与作用域:如何保证变量不会被遮蔽?
12|基本数据类型:Go原生支持的数值类型有哪些?
13|基本数据类型:为什么Go要原生支持字符串类型?
14|常量:Go在“常量”设计上的创新有哪些?
15|同构复合类型:从定长数组到变长切片
16|复合数据类型:原生map类型的实现机制是怎样的?
17|复合数据类型:用结构体建立对真实世界的抽象
18|控制结构:if的“快乐路径”原则
19|控制结构:Go的for循环,仅此一种
20|控制结构:Go中的switch语句有哪些变化?
21|函数:请叫我“一等公民”
22|函数:怎么结合多返回值进行错误处理?
23|函数:怎么让函数更简洁健壮?
24|方法:理解“方法”的本质
25|方法:方法集合与如何选择receiver类型?
26|方法:如何用类型嵌入模拟实现“继承”?
27|即学即练:跟踪函数调用链,理解代码更直观
28|接口:接口即契约
29|接口:为什么nil接口不等于nil?
30|接口:Go中最强大的魔法
31|并发:Go的并发方案实现方案是怎样的?
32|并发:聊聊Goroutine调度器的原理
33|并发:小channel中蕴含大智慧
34|并发:如何使用共享变量?
35|即学即练:如何实现一个轻量级线程池?
36|打稳根基:怎么实现一个TCP服务器?(上)
37|代码操练:怎么实现一个TCP服务器?(中)
38|成果优化:怎么实现一个TCP服务器?(下)
39 | 驯服泛型:了解类型参数
40|驯服泛型:定义泛型约束
41 | 驯服泛型:明确使用时机
当前位置:
首页>>
技术小册>>
Go语言入门实战经典
小册名称:Go语言入门实战经典
### 12 | 基本数据类型:Go原生支持的数值类型有哪些? 在Go语言(Golang)的编程世界中,基本数据类型构成了程序设计的基石,它们直接映射到计算机的内存中,用于存储和操作数据。数值类型作为基本数据类型的重要组成部分,用于表示整数、浮点数等数学上的数值。Go语言原生支持多种数值类型,以满足不同场景下的精度和性能需求。本章节将详细探讨Go语言中的数值类型,包括整数类型、浮点类型以及它们的特点和使用场景。 #### 1. 整数类型 整数类型用于存储没有小数部分的数值。Go语言提供了多种整数类型,以支持不同大小的整数,从而优化内存使用和计算效率。整数类型按照其能表示数值的范围从小到大可以分为以下几类: - **`int8`**:8位有符号整数,范围从-128到127。 - **`int16`**:16位有符号整数,范围从-32768到32767。 - **`int32`**:32位有符号整数,范围从-2,147,483,648到2,147,483,647。 - **`int64`**:64位有符号整数,范围从-9,223,372,036,854,775,808到9,223,372,036,854,775,807。 此外,Go还提供了对应的无符号整数类型,它们只能表示非负整数,范围是从0开始到其最大正整数值: - **`uint8`**(别名`byte`):8位无符号整数,范围从0到255,常用于表示ASCII字符或二进制数据。 - **`uint16`**:16位无符号整数,范围从0到65535。 - **`uint32`**:32位无符号整数,范围从0到4,294,967,295。 - **`uint64`**:64位无符号整数,范围从0到18,446,744,073,709,551,615。 **注意**:Go还提供了一个特殊的整数类型`int`,其大小取决于运行程序的系统架构(32位或64位)。在32位系统上,`int`通常是32位的;在64位系统上,`int`通常是64位的。这种设计使得Go程序能够更自然地适应不同的硬件环境。 #### 2. 浮点类型 浮点类型用于存储有小数部分的数值,它们在计算机中通过科学计数法来表示,以支持更大范围的数值和更精确的小数部分。Go语言提供了两种浮点类型: - **`float32`**:32位浮点数,遵循IEEE 754标准,大约可以提供7位十进制数字的精度。 - **`float64`**:64位浮点数,同样遵循IEEE 754标准,大约可以提供15位十进制数字的精度。 在大多数需要浮点数的场景下,推荐使用`float64`,因为它提供了更高的精度,足以满足大多数科学计算和工程应用的需求。然而,在内存使用非常关键或对性能有极高要求的场景下,可以考虑使用`float32`以节省内存空间。 #### 3. 复数类型 除了基本的整数和浮点类型外,Go还提供了复数类型,用于表示数学上的复数。复数由实部和虚部组成,Go通过`complex64`和`complex128`两种类型来支持复数,其中: - **`complex64`**:表示实部和虚部都是`float32`类型的复数。 - **`complex128`**:表示实部和虚部都是`float64`类型的复数。 复数类型在需要进行复数运算的场合非常有用,如信号处理、物理模拟等领域。 #### 4. 数值类型的选择 在编写Go程序时,选择合适的数值类型对于程序的性能和内存使用至关重要。以下是一些选择数值类型的指导原则: - **考虑数值范围**:根据程序需要处理的数值大小选择合适的整数或浮点类型。 - **考虑精度需求**:对于需要高精度计算的场景,应优先选择`float64`或相应的整数类型。 - **考虑内存使用**:在内存使用受限的场景下,可以考虑使用较小的整数或浮点类型。 - **考虑性能影响**:不同的数值类型在运算时可能有不同的性能表现,应根据实际需求进行权衡。 #### 5. 数值类型的转换 Go语言允许在数值类型之间进行转换,但需要注意的是,这种转换可能是不安全的,因为可能会导致数据丢失(如从`int64`转换为`int32`时,如果`int64`的值超出了`int32`的范围)。进行类型转换时,应明确转换的目的和可能的风险。 类型转换的基本语法如下: ```go var a int32 = 123 var b int64 = int64(a) // 显式地将int32转换为int64 ``` #### 6. 数值类型的字面量 在Go中,数值类型的字面量可以直接使用,编译器会根据上下文自动推断其类型。例如: ```go var a = 123 // 默认为int类型,具体取决于系统架构 var b = 123.45 // 默认为float64类型 var c = 123i // 复数类型,但注意这是错误的写法,应使用complex(real, imag)函数或字面量形式如123 + 45i ``` 对于复数,正确的字面量表示方式如下: ```go var d = complex(123, 45) // 使用complex函数创建complex128类型的复数 var e = 123 + 45i // 直接使用字面量形式创建complex128类型的复数 ``` #### 总结 Go语言提供了丰富的数值类型,包括多种整数类型、浮点类型以及复数类型,以满足不同场景下的需求。在选择数值类型时,应综合考虑数值范围、精度需求、内存使用和性能影响等因素。同时,了解数值类型的转换规则和字面量表示方式也是编写高效、健壮Go程序的重要基础。通过合理使用这些数值类型,可以编写出既高效又易于维护的Go程序。
上一篇:
11|代码块与作用域:如何保证变量不会被遮蔽?
下一篇:
13|基本数据类型:为什么Go要原生支持字符串类型?
该分类下的相关小册推荐:
从零写一个基于go语言的Web框架
深入浅出Go语言核心编程(一)
Golang并发编程实战
深入解析go语言
深入浅出Go语言核心编程(七)
Go Web编程(中)
深入浅出Go语言核心编程(五)
深入浅出Go语言核心编程(四)
Golang修炼指南
Go开发权威指南(下)
GO面试指南
深入浅出Go语言核心编程(六)