目录
掌握 Go 语言的基本数据类型
Go 语言是强类型语言,这意味着每个变量都必须有明确的类型。掌握基本数据类型是编程的基石。
1. 整型 (Integer)
整型用于表示没有小数部分的数值。
常用整型
Go 语言提供了多种整型,但最常用的是 int。
int: 平台相关类型。在 64 位系统上是 64 位(8字节),在 32 位系统上是 32 位(4字节)。推荐默认使用。int64: 明确指定为 64 位整数,常用于需要处理超大数值或时间戳的场景。
所有整型列表
| 类型 | 长度 | 范围 | 说明 |
|---|---|---|---|
int8 | 1字节 | -128 ~ 127 | |
uint8 (byte) | 1字节 | 0 ~ 255 | byte 是 uint8 的别名 |
int16 | 2字节 | -32768 ~ 32767 | |
uint16 | 2字节 | 0 ~ 65535 | |
int32 (rune) | 4字节 | -21亿 ~ 21亿 | rune 是 int32 的别名 |
uint32 | 4字节 | 0 ~ 42亿 | |
int64 | 8字节 | 很大 | |
uint64 | 8字节 | 很大 | |
int | 4或8字节 | 平台相关 | 最常用 |
uint | 4或8字节 | 平台相关 |
进制表示
Go 支持多种进制的字面量表示:
go
// 十进制
i1 := 101
fmt.Printf("%d\n", i1)
// 二进制 (0b 开头, Go 1.13+)
i2 := 0b1100101
fmt.Printf("%b\n", i2)
// 八进制 (0o 开头, 或者 0 开头)
i3 := 0o77
fmt.Printf("%o\n", i3)
// 十六进制 (0x 开头)
i4 := 0x1234567
fmt.Printf("%x\n", i4)小技巧:数字分隔符 (Go 1.13+)
为了方便阅读大数字,Go 允许使用下划线 _ 作为分隔符。
go
money := 1_000_000 // 一百万,清晰易读
fmt.Println(money) // 输出: 10000002. 浮点型 (Float)
用于表示小数。Go 语言支持两种浮点型:
float64: 双精度。默认类型,推荐使用,因为精度更高。float32: 单精度。占用空间小,但精度较低,容易发生精度丢失。
go
f1 := 3.14159
fmt.Printf("f1类型:%T\n", f1) // 输出: float64注意
浮点数计算存在精度问题,涉及金钱计算时请使用 decimal 第三方库(如 github.com/shopspring/decimal)。
3. 布尔型 (Bool)
布尔型只有两个值:true (真) 和 false (假)。
- 默认值为
false。 - 不支持用 0 或 1 代替 true/false(这与 C/C++ 不同)。
go
var b bool // 默认为 false
b = true4. 字符串 (String)
Go 中的字符串是不可变的字节序列,默认使用 UTF-8 编码。
定义方式
- 双引号
": 支持转义字符(如\n换行)。 - 反引号
`: 原生字符串,支持多行,不支持转义(所见即所得)。
go
s1 := "Hello\nWorld"
s2 := `
多行
字符串
`字符类型:byte 和 rune
Go 语言中没有专门的 char 类型,而是使用两种整型来表示字符:
byte(uint8的别名): 代表一个 ASCII 字符(如'a','1')。占用 1 个字节。rune(int32的别名): 代表一个 Unicode 字符(如'中','😀')。占用 4 个字节。
go
s := "Hello王"
// len() 返回的是字节数
fmt.Println(len(s)) // 输出 8 (5个英文 + 1个中文3字节)
// 遍历字符串
for _, c := range s {
// c 的类型是 rune
fmt.Printf("%c ", c)
}
// 输出: H e l l o 王字符串修改
字符串是不可变的。如果要修改,必须先转换为 []rune 切片,修改后再转回 string。
go
s := "白萝卜"
r := []rune(s)
r[0] = '红'
s = string(r) // "红萝卜"5. 类型转换
Go 语言是强类型语言,不同类型之间不能隐式转换(即使是 int 和 int64 也不行)。必须进行显式转换。
go
a := 10 // int
b := 3.14 // float64
// c := a + b // ❌ 报错:类型不匹配
c := float64(a) + b // ✅ 正确:将 a 转为 float646. 新增特性 (Go 1.18+)
Any 类型 (Go 1.18)
any 是 interface{} 的别名。它表示“任意类型”。从 Go 1.18 开始,建议使用 any 替代 interface{},因为更简短明确。
go
var x any
x = 100
x = "hello"
fmt.Println(x)内置最值函数 (Go 1.21)
Go 1.21 引入了 min 和 max 内置函数,无需再自己手写比较逻辑了。
go
fmt.Println(min(1, 2, 3)) // 输出: 1
fmt.Println(max(10, 20)) // 输出: 20扫描下方二维码,私信【训练营】可进行咨询和报名。 
