Skip to content
目录

掌握 Go 语言的基本数据类型

Go 语言是强类型语言,这意味着每个变量都必须有明确的类型。掌握基本数据类型是编程的基石。

1. 整型 (Integer)

整型用于表示没有小数部分的数值。

常用整型

Go 语言提供了多种整型,但最常用的是 int

  • int: 平台相关类型。在 64 位系统上是 64 位(8字节),在 32 位系统上是 32 位(4字节)。推荐默认使用
  • int64: 明确指定为 64 位整数,常用于需要处理超大数值或时间戳的场景。

所有整型列表

类型长度范围说明
int81字节-128 ~ 127
uint8 (byte)1字节0 ~ 255byteuint8 的别名
int162字节-32768 ~ 32767
uint162字节0 ~ 65535
int32 (rune)4字节-21亿 ~ 21亿runeint32 的别名
uint324字节0 ~ 42亿
int648字节很大
uint648字节很大
int4或8字节平台相关最常用
uint4或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) // 输出: 1000000

2. 浮点型 (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 = true

4. 字符串 (String)

Go 中的字符串是不可变的字节序列,默认使用 UTF-8 编码。

定义方式

  1. 双引号 ": 支持转义字符(如 \n 换行)。
  2. 反引号 `: 原生字符串,支持多行,不支持转义(所见即所得)。
go
s1 := "Hello\nWorld"
s2 := `
    多行
    字符串
`

字符类型:byte 和 rune

Go 语言中没有专门的 char 类型,而是使用两种整型来表示字符:

  1. byte (uint8 的别名): 代表一个 ASCII 字符(如 'a', '1')。占用 1 个字节。
  2. 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 语言是强类型语言,不同类型之间不能隐式转换(即使是 intint64 也不行)。必须进行显式转换。

go
a := 10      // int
b := 3.14    // float64

// c := a + b // ❌ 报错:类型不匹配
c := float64(a) + b // ✅ 正确:将 a 转为 float64

6. 新增特性 (Go 1.18+)

Any 类型 (Go 1.18)

anyinterface{} 的别名。它表示“任意类型”。从 Go 1.18 开始,建议使用 any 替代 interface{},因为更简短明确。

go
var x any
x = 100
x = "hello"
fmt.Println(x)

内置最值函数 (Go 1.21)

Go 1.21 引入了 minmax 内置函数,无需再自己手写比较逻辑了。

go
fmt.Println(min(1, 2, 3)) // 输出: 1
fmt.Println(max(10, 20))  // 输出: 20

扫描下方二维码,私信【训练营】可进行咨询和报名。 微信公众号二维码

🚀 学习遇到瓶颈?想进大厂?

看完这篇技术文章,如果还是觉得不够系统,或者想在实战中快速提升?
王中阳的就业陪跑训练营,提供定制化学习路线 + 企业级实战项目 + 简历优化 + 模拟面试。

了解训练营详情