刚接触 Go 时,变量声明看起来很直接,但真正写代码时,往往会卡在“该用哪种类型”“能不能直接转换”“转换后会不会丢值”这些具体问题上。本文按布尔、数值、字符串和类型转换四部分重组内容,保留原有示例与范围数据,帮助你快速判断不同基础类型的适用场景,以及什么时候该显式转换。
布尔类型:只有真与假,但声明方式不止一种
Go 的布尔类型标识符是 bool,可取值只有 true 和 false,默认值为 false。这一点虽然简单,但在变量声明、初始化和类型推导时很常见,尤其适合用在条件判断、状态标记这类场景中。
// 声明isSunday为bool类型,默认值为 false
var isSunday bool
// 声明isSaturday变量,并赋值为true
var isSaturday bool = true
// 类型推导模式:
var isSaturday = true
// 可以缩写为
isSaturday := true
从这组写法可以看出,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 包。

数值类型互转:直接写目标类型
数值类型之间转换的基本方式很直接,就是用目标类型包住原变量。不过要注意,转换前应确保新类型的取值范围足以容纳原值。
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 这组常用方法。把这些基础判断理顺后,后续学习数组、切片、结构体和函数参数时会顺畅很多。









