go声明整数需明确有/无符号及位宽,int/int32等不可混用;浮点数须显式选float32/float64;复数、bool有固定零值;:=仅限函数内类型推导,跨包或协议场景须显式声明。

Go里声明整数变量要选对类型和符号
Go没有int这种“万能整数”,必须明确是有符号还是无符号、多少位。用错类型容易在跨平台或与C交互时出问题,比如int在32位系统是32位,在64位系统是64位,直接传给C函数可能崩溃。
-
int8、int16、int32、int64:有符号整数,位宽固定,适合协议字段、内存敏感场景 -
uint8(即byte)、uint16、uint32、uint64:无符号,常用于计数器、偏移量、二进制解析 -
int和uint:运行时决定位宽,仅推荐用于循环索引、切片长度等“逻辑计数”场景,别存协议数据
示例:
var id int32 = 1001<br>var flag uint8 = 0b10000000<br>var count int = len(items) // 合理
浮点数声明必须区分float32和float64
Go不提供默认浮点类型,float32和float64不能混用,连比较都要显式转换。精度丢失不是警告,是编译错误。
-
float32:单精度,约6–7位有效数字,适合图形、嵌入式等对内存/带宽敏感的场景 -
float64:双精度,约15–16位,Go标准库数学函数(如math.Sin)只接受float64 - 字面量
3.14默认是float64,赋值给float32变量需强制转换:var x float32 = float32(3.14)
复数和布尔类型声明很简单但容易忽略零值
complex64和complex128分别对应float32和float64实部/虚部,声明后零值是0+0i;bool零值是false——这点和C不同,未初始化的bool不会是随机值。
- 声明方式统一:
var active bool、var z complex128 - 别用
== true判断布尔,直接写if active { ... } -
complex64极少用,除非处理大量复数且内存受限;一般用complex128
类型推导声明(:=)的边界在哪里
:=能省略类型,但只在函数内部有效,且推导结果不可控:字面量42推成int,3.14推成float64,'a'推成rune(即int32)。跨包传递或需要特定类型时,显式声明更安全。
- 接口变量、切片、map必须显式声明类型,
:=会报错 - 结构体字段、全局变量、函数参数/返回值不能用
:= - 想快速试值?用
:=;想确保类型稳定?写全var x int32
真正麻烦的不是怎么写,而是类型一旦定错,后续所有计算、序列化、网络传输都可能悄悄出错,而编译器不会提醒你“这里用int不如int32”。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











