Go 基本数据类型与类型转换:入门时最容易混淆的地方,一次理清

Owen
Owen
发布时间:2026-08-25| 71人浏览过
原创

前言

刚接触 Go 时,变量声明看起来很直接,但真正写代码时,往往会卡在“该用哪种类型”“能不能直接转换”“转换后会不会丢值”这些具体问题上。本文按布尔、数值、字符串和类型转换四部分重组内容,保留原有示例与范围数据,帮助你快速判断不同基础类型的适用场景,以及什么时候该显式转换。

刚接触 Go 时,变量声明看起来很直接,但真正写代码时,往往会卡在“该用哪种类型”“能不能直接转换”“转换后会不会丢值”这些具体问题上。本文按布尔、数值、字符串和类型转换四部分重组内容,保留原有示例与范围数据,帮助你快速判断不同基础类型的适用场景,以及什么时候该显式转换。

布尔类型:只有真与假,但声明方式不止一种

Go 的布尔类型标识符是 bool,可取值只有 true 和 false,默认值为 false。这一点虽然简单,但在变量声明、初始化和类型推导时很常见,尤其适合用在条件判断、状态标记这类场景中。

// 声明isSunday为bool类型,默认值为 false
var isSunday bool
// 声明isSaturday变量,并赋值为true
var isSaturday bool = true
// 类型推导模式:
var isSaturday = true
// 可以缩写为
isSaturday := true

从这组写法可以看出,Go 既支持显式声明类型,也支持通过初始值自动推导类型。对于局部变量,:= 是最常见的写法;如果只是声明未赋值变量,则会拿到该类型的默认值。

数值类型怎么选:先看整数、再看精度与范围

数值类型用于表示数字,包括整数、小数,以及较少在入门阶段使用的复数。实际开发时,最关键的不是把类型名背下来,而是先判断数据是否可能为负数、需要占用多大范围、是否依赖当前系统位数。

Go 数值类型选择示意图,突出有符号无符号、固定长度与系统相关类型的判断关系
Go 数值类型的选型思路把整数类型按“是否需要负数”和“是否依赖系统位数”整理后,选型会更直观。

整型:是否有符号,决定能不能表示负数

整型用于存储整数。这里的“有符号”和“无符号”,本质上就是是否需要表示正负值。无符号整型只表示 大于等于0 的数;有符号整型则既能存正数,也能存负数。

类型 描述 取值范围
uint8 无符号 8 位整型 (0 to 255)
uint16 无符号 16 位整型 (0 to 65535)
uint32 无符号 32 位整型 (0 to 4294967295)
uint64 无符号 64 位整型 (0 to 18446744073709551615)
int8 有符号 8 位整型 (-128 to 127)
int16 有符号 16 位整型 (-32768 to 32767)
int32 有符号 32 位整型 (-2147483648 to 2147483647)
int64 有符号 64 位整型 (-9223372036854775808 to 9223372036854775807)

选择整型时,可以先看变量需要覆盖的取值范围,再决定使用哪个具体类型。范围足够、占用空间合适,通常就够了。

系统相关整型与常见别名

除了固定长度的整型,Go 还提供了几个在日常开发里经常遇到的类型或别名,它们和平台位数、字符处理、指针存储有关。

类型 描述 取值范围
uint 无符号整型,在32位系统上是uint32,64位系统上市uint64 同uint32或uint64
int 有符号整型,在32位系统上是int32,64位系统上市int64 同int32或int64
byte uint8的别名 -
rune int32的别名 -
uintptr 无符号整型,用于存储指针 -

uint 和 int 的范围取决于运行环境是 32 位还是 64 位系统,因此在需要固定范围时,更适合直接使用 int32、int64 这类明确类型。byte 和 rune 则更多出现在字节处理、字符处理等场景中。

浮点型与复数:一个看小数,一个看实部虚部

浮点型用于存储带小数点的值,主要分为两种:

类型 描述 取值范围
float32 32位浮点型 1.4e-45~3.4e38
float64 64位浮点型 4.9e-324~1.8e308

如果只是理解概念,可以把它看成“程序里用来存小数的类型”;如果进入实际开发,float32 和 float64 的选择通常还会关联到精度需求。

复数类型在一般业务代码里没有整数和浮点型常见,但 Go 也提供了内建支持:

类型 描述
complex64 32 位实数和虚数
complex128 64 位实数和虚数
z := 1 + 2i
x := real(z)
y := imag(z)

fmt.Println(x, y) // 1, 2

上面这段代码里,z 是一个复数,real(z) 取实部,imag(z) 取虚部,输出结果分别是 1 和 2。

字符串怎么写:单行、多行和拼接都很常用

字符串本质上是一连串字符组成的片段。在 Go 中,字符串既可以写成单行,也可以使用反引号书写多行文本,还能通过 + 进行拼接。

// 单行字符串
var s1 string = ""
// 多行字符串
var s2 string = `
多行
字符串
`

// 多段字符串拼接
var s3 string = "Hello" + " " + "world !"

这几种写法覆盖了大多数入门场景:空字符串初始化、保留换行格式的多行文本,以及把多个字符串片段组合成最终结果。理解这里的差别后,再看后面的字符串与数字互转会更顺手。

类型转换怎么做:数值互转与 strconv 是重点

Go 是强类型语言,不同类型之间不能随意混用。数值类型之间转换时,需要显式写出目标类型;而字符串和整数之间互转,通常依赖 strconv 包。

Go 类型转换方法对照图,展示数值互转与 strconv 常用函数的适用方向
Go 常见类型转换速查数值转换和字符串转换虽然都叫“类型转换”,但写法与风险点并不一样。

数值类型互转:直接写目标类型

数值类型之间转换的基本方式很直接,就是用目标类型包住原变量。不过要注意,转换前应确保新类型的取值范围足以容纳原值。

var n1 int16 = 100
var n2 int32 = int32(n1)

这类转换语法简单,但风险也最容易被忽略:语法允许,不代表值一定安全,尤其是在从大范围类型转到小范围类型时更要留意。

字符串与整数互转:看清 Itoa、Atoi、FormatInt、ParseInt

int 转字符串,可以使用 strconv.Itoa:

var n1 int = 10
var s1 string = strconv.Itoa(n1) // "10"

字符串转 int,可以使用 strconv.Atoi:

var s2 string = "100"
var n2, e = strconv.Atoi(s2) // n2 = 100,如果字符串不是纯数值,则返回错误e

这里需要特别注意,Atoi 在字符串不是纯数值时会返回错误,因此实际使用里不能只关心结果值,也要检查错误变量 e。

int64 转字符串时,常用 strconv.FormatInt:

var n1 int64 = 10
var s1 string = strconv.FormatInt(n1, 10)

字符串转 int64 时,则使用 strconv.ParseInt:

var s2 string = "100"
var n2, e = strconv.ParseInt(s2, 10, 64)

其中,10 表示按十进制解析,64 表示目标位宽为 64 位。把这四个函数分清楚,Go 里最常见的字符串与整数转换就基本够用了。

快速判断:写 Go 基础类型时优先看这几件事

回到实用层面,基础类型的选择可以按几个问题快速判断:这个值是否只有真假?是否可能为负数?需要多大取值范围?是否包含小数?是不是字符串输入后要转成数字?

如果只是状态值,用 bool;如果是整数,先区分是否需要负数,再根据范围决定使用 int8、int16、int32、int64 或对应的无符号类型;如果是小数,用浮点型;如果涉及字符串和数字互转,优先记住 strconv.Itoa、strconv.Atoi、strconv.FormatInt、strconv.ParseInt 这组常用方法。把这些基础判断理顺后,后续学习数组、切片、结构体和函数参数时会顺畅很多。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。