Skip to content

Go数据类型 ​

阅读提示

  • 适用版本:Go 1.21+(示例在 Go 1.22 下验证)· 前置知识:基本语法 · 阅读时长:约 4 分钟

下面列出 Go 语言中全部的内置类型,以供参考,更多细节可以前往参考手册-类型。

布尔类型 ​

布尔类型只有真值和假值。

类型描述
booltrue为真值,false为假值

TIP

在 Go 中,整数 0 并不代表假值,非零整数也不能代表真值,即数字无法代替布尔值进行逻辑判断,两者是完全不同的类型。

整型 ​

Go 中为不同位数的整数分配了不同的类型,主要分为无符号整型与有符号整型。

序号类型和描述
uint8无符号 8 位整型
uint16无符号 16 位整型
uint32无符号 32 位整型
uint64无符号 64 位整型
int8有符号 8 位整型
int16有符号 16 位整型
int32有符号 32 位整型
int64有符号 64 位整型
uint无符号整型 至少 32 位
int整型 至少 32 位
uintptr等价于无符号 64 位整型,但是专用于存放指针运算,用于存放死的指针地址。

浮点型 ​

IEEE-754浮点数,主要分为单精度浮点数与双精度浮点数。

类型类型和描述
float32IEEE-754 32 位浮点数
float64IEEE-754 64 位浮点数

复数类型 ​

类型描述
complex12864 位实数和虚数
complex6432 位实数和虚数

字符类型 ​

go 语言字符串完全兼容 UTF-8

类型描述
byte等价 uint8 可以表达 ANSCII 字符
rune等价 int32 可以表达 Unicode 字符
string字符串即字节序列,可以转换为[]byte类型即字节切片

派生类型 ​

类型例子
数组[5]int,长度为 5 的整型数组
切片[]float64,64 位浮点数切片
映射表map[string]int,键为字符串类型,值为整型的映射表
结构体type Gopher struct{},Gopher 结构体
指针*int,一个整型指针。
函数type f func(),一个没有参数,没有返回值的函数类型
接口type Gopher interface{},Gopher 接口
通道chan int,整型通道

零值 ​

官方文档中零值称为zero value,零值并不仅仅只是字面上的数字零,而是一个类型的空值或者说默认值更为准确。

类型零值
数字类型0
布尔类型false
字符串类型""
数组固定长度的对应类型的零值集合
结构体内部字段都是零值的结构体
切片,映射表,函数,接口,通道,指针nil

nil ​

nil类似于其它语言中的none或者null,但并不等同。nil仅仅只是一些引用类型的零值,并且不属于任何类型,从源代码中的nil可以看出它仅仅只是一个变量。

go
var nil Type

并且nil == nil这样的语句是无法通过编译的。

完整示例 ​

下面的程序可以直接运行:复制到文件后执行 go run main.go,或粘贴到 Go Playground 运行。

go
package main

import "fmt"

func main() {
	var (
		b   bool    = true
		i   int     = 42
		i8  int8    = 127
		u8  uint8   = 255
		f   float64 = 3.5
		s   string  = "go"
		r   rune    = '中'
		by  byte    = 'A'
	)

	fmt.Println(b, i, i8, u8, f, s)
	fmt.Printf("rune %c is code point %d\n", r, r)
	fmt.Printf("byte %c = %d\n", by, by)

	// 不同类型之间不会隐式转换
	ratio := float64(i) / 8
	fmt.Println(ratio)

	// 无符号整数溢出在运行时会回绕
	var small uint8 = 255
	small++
	fmt.Println(small)
}

预期输出:

text
true 42 127 255 3.5 go
rune 中 is code point 20013
byte A = 65
5.25
0

常见错误与踩坑 ​

  • 数值类型之间没有隐式转换。 int 与 int64 不能直接相加,必须显式转换其中一侧。
  • int 的宽度与平台相关(可能是 32 位或 64 位)。文件与网络协议应使用 int64 等定长类型。
  • 运行时整型溢出会静默回绕,而常量溢出会编译报错;涉及金额等精度场景要提前校验。
  • byte 是 uint8 的别名,rune 是 int32 的别名。 用下标访问字符串得到的是 byte 而不是 rune,非 ASCII 字符会被截断。
  • 浮点数不要直接比较相等。 应使用 epsilon 或 math 包;另外 NaN != NaN 恒成立。

更新记录 ​

  • 2026-10-14:新增"阅读提示"、完整可运行示例(含预期输出)、常见错误与踩坑清单,以及本更新记录。