Go数据类型介绍

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

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


整数(Integers)

在 Go 中,整数类型包括:
uint8uint16uint32uint64int8int16int32int64

其中 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.234123.40.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 类型只能取两个值:truefalse

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 中还有一些有趣的数值类型别名:

  • runeint32 的别名

  • byteuint8 的别名

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

  • byte 表示 ASCII 字符

  • rune 表示 Unicode 字符的码点值


复数(Complex numbers)

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

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

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

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

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

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


总结

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

  • 有符号与无符号整数

  • 浮点数

  • 复数

  • bool 类型

  • runebyte

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

相关推荐
leoufung6 小时前
LeetCode 74. Search a 2D Matrix
数据结构·算法·leetcode
墨香幽梦客6 小时前
合规视角的数据安全与隐私:HIPAA等法规的架构内生化实践
java·分布式·微服务
‿hhh6 小时前
学习笔记整理(部分)
java·开发语言·笔记·学习·mvc
JIngJaneIL7 小时前
基于Java + vue干洗店预约洗衣系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
The_SkyUzi7 小时前
【无标题】
java·maven
Mxsoft6197 小时前
AR远程定位偏差救场!某次现场故障,SLAM算法精准对齐设备模型!
算法·ar
han_hanker7 小时前
统一拦截异常 @RestControllerAdvice
java·开发语言·数据库
Hello娃的7 小时前
【量子力学】Hohenberg-Kohn 定理
人工智能·算法