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 位) | 与平台相关 | 与平台相关 |
变量声明方式
var number1 int
number1 = 100
var number2 int = 100
变量类型在编译期确定。即使我们不显式指定类型,Go 也可以根据初始值推断类型。下面的变量在编译后都会是 int 类型:
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。
var b bool = true
运算示例:
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万+

被折叠的 条评论
为什么被折叠?



