Go数据类型介绍

Go 是一门静态类型 编程语言。这意味着变量在声明时就确定了类型,并且之后不能改变。乍一看,静态类型似乎不太方便:你可能需要花很多时间去修复编译器报错,程序才能通过编译。然而,提前知道数据类型可以帮助我们在编译阶段 就理解程序为什么不能正常工作,从而避免许多常见错误。

Go 中有多种内置数据类型,下面我们将逐一介绍。


整数(Integers)

在 Go 中,整数类型包括:
uint8、uint16、uint32、uint64、int8、int16、int32、int64。

其中 8、16、32、64 表示该类型占用的位数 。
uint 表示无符号整数 (unsigned integer),int 表示有符号整数 (signed integer)。

无符号整数只能取非负值(包括 0)。

类型 描述 最小值 最大值
uint8 无符号 8 位整数 0 255
uint16 无符号 16 位整数 0 65535
uint32 无符号 32 位整数 0 2³² − 1
uint64 无符号 64 位整数 0 2⁶⁴ − 1
uint 与平台相关(32 或 64 位) 0 与平台相关
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
int 与平台相关(32 或 64 位) 与平台相关 与平台相关

变量声明方式

go 复制代码
var number1 int
number1 = 100

var number2 int = 100

变量类型在编译期确定。即使我们不显式指定类型 ,Go 也可以根据初始值推断类型。下面的变量在编译后都会是 int 类型:

go 复制代码
var number1 = 100 
// 或者
number2 := 100

浮点数(Floats)

浮点数用于表示带小数的实数,例如:1.234、123.4、0.00001234。

它们在计算机中的表示方式较为复杂,这里只需要记住以下几点:

  • 浮点数不能精确表示所有十进制小数 。

    例如,1.01 - 0.99 的结果可能是
    0.020000000000000018,非常接近但并不完全等于 0.02。

  • 浮点数也有大小之分:32 位或 64 位。位数越大,精度越高。

  • 除了普通数字,还有特殊值:

    • NaN(Not a Number,例如 0/0)

    • 正无穷 +∞

    • 负无穷 −∞

Go 中有两种浮点类型:

  • float32(单精度)

  • float64(双精度)

在大多数情况下,float32 已经足够;如果需要更高精度,可以使用 float64。


布尔值(Booleans)

布尔类型是 bool(以 George Boole 命名),用于表示真或假 。

一个 bool 类型变量只占用 1 个字节。

逻辑运算符如下:

字面量 含义
&& 与(AND)
! 非(NOT)

bool 类型只能取两个值:true 或 false。

go 复制代码
var b bool = true

运算示例:

go 复制代码
var b1 = true
b2 := !b1      // false
b3 := b2 || b1 // false OR true => true
b4 := b2 && b3 // false AND true => false
b5 := b1 && b3 // true AND true => true

rune 与 byte

Go 中还有一些有趣的数值类型别名:

  • rune 是 int32 的别名

  • byte 是 uint8 的别名

Go 没有单独的字符类型,而是用:

  • byte 表示 ASCII 字符

  • rune 表示 Unicode 字符的码点值


复数(Complex numbers)

与一些语言不同,Go 原生支持复数:

  • complex64:32 位实部 + 32 位虚部

  • complex128:64 位实部 + 64 位虚部

Go 提供了内置的 complex 函数,用于使用变量创建复数。

复数支持所有基本算术运算:+、−、*、/。

这里不再展开,如有兴趣,可以查阅 cmplx 包的官方文档。


总结

Go 提供了多种基本(原始)数据类型,本节主要介绍了:

  • 有符号与无符号整数

  • 浮点数

  • 复数

  • bool 类型

  • rune 与 byte

通过组合这些类型,我们就可以使用算术和逻辑表达式来编写完整的 Go 程序。

相关推荐
果霸大叔4 分钟前
AI网关第8篇:AI 代理与负载均衡--多模型实例如何调度?
人工智能·算法·自然语言处理·负载均衡·ai-native
不会就选b9 分钟前
算法日常・每日刷题--<动态规划>29
数据结构·算法·leetcode
垆边人似月.17 分钟前
最少的元素个数使和为 target
数据结构·c++·算法
炽橙超真云19 分钟前
2D 工程图纸如何自动转成可编辑 3D 模型?拆解读图与建体两条技术路径(DXF/DWG/PDF 到 STEP)
算法·3d·工业智能·工业ai
金銀銅鐵26 分钟前
[Java] 用 GUI 展示 ArrayList 扩容的过程
java·后端·ai编程
夕除27 分钟前
redis--dict rehash
算法·哈希算法
土豆.exe28 分钟前
chunked 编码的行尾:Go、h11 与 Tomcat 各错在哪一处
开发语言·网络安全·golang·tomcat
磊 子29 分钟前
什么是虚假唤醒(spurious wakeup)?从 POSIX 标准讲到 futex 内核
java·开发语言
飘然生39 分钟前
traceId链路 skywalking java agent
java·开发语言·skywalking
云上先途142 分钟前
Agent 轨迹数据一般包含哪些内容,加工的核心目标是什么?
人工智能·算法·机器学习