Go强制类型安全,int与int64不可隐式转换;跨平台用int32/int64;包级变量必须var;string操作需注意UTF-8字节与字符区别;浮点比较须用误差容忍。

Go 的数据类型不是“选一个就行”,而是“选错一个就卡住编译”——它强制你从第一行变量声明起就面对类型安全。
为什么 int 和 int64 不能混用?
Go 不做任何隐式转换,哪怕只是 int 和 int64 这种“看起来一样”的整数类型,也属于完全不同的类型。比如传参给期望 int64 的函数时传了 int,会直接报错:cannot use x (type int) as type int64 in argument。
- 平台相关性:
int在 32 位系统是 32 位,在 64 位系统是 64 位,跨平台序列化或 RPC 时极易出错 - 网络/存储场景必须用定宽类型:
int32或int64,否则 JSON 解码可能失败或截断 - 循环索引、局部计数器可用
int;但涉及时间戳、ID、文件大小等,一律优先写明int64
:= 声明 vs var 声明:什么时候该停手?
:= 看似方便,但它只在函数内部有效,且要求右侧值能明确推导类型;而 var 是唯一能用于包级变量、接口字段、延迟赋值的正统方式。
- 包级变量必须用
var:var port int = 8080✅;port := 8080❌(编译错误) - 需要先声明后赋值(比如 err 变量常在 if 分支中才赋值):
var err error✅;err := someFunc()可能造成重复声明 - 批量配置项建议用
var ()块:var ( timeout = 30 * time.Second debug = true ),可读性强、支持注释、类型可选
字符串操作最常踩的三个坑
Go 的 string 是不可变的 UTF-8 字节序列,不是字符数组。看似简单的 len(s) 或 s[0],背后全是陷阱。
Delphi 7应用编程150例 CHM全书内容下载,全书主要通过150个实例,全面、深入地介绍了用Delphi 7开发应用程序的常用方法和技巧,主要讲解了用Delphi 7进行界面效果处理、图像处理、图形与多媒体开发、系统功能控制、文件处理、网络与数据库开发,以及组件应用等内容。这些实例简单实用、典型性强、功能突出,很多实例使用的技术稍加扩展可以解决同类问题。使用本书最好的方法是通过学习掌握实例中的技术或技巧,然后使用这些技术尝试实现更复杂的功能并应用到更多方面。本书主要针对具有一定Delphi基础知识
立即学习“go语言免费学习笔记(深入)”;
-
len(s)返回字节数,不是字符数 —— 中文、emoji 都占多个字节;要算 Unicode 字符数,得写len([]rune(s)) -
s[i]取的是第 i 个字节,不是第 i 个字符;对中文字符串直接索引容易切到半个 UTF-8 编码,panic 或乱码 - 拼接大量字符串别用
+:str += "a"每次都分配新内存;高频场景用strings.Builder,性能差 10 倍以上
浮点数比较和转换为什么不能用 ==?
因为 float64 存在精度丢失,0.1 + 0.2 != 0.3 是常态。Go 不提供“近似相等”运算符,你得自己控误差。
- 永远别写
if a == b判断浮点数;改用math.Abs(a-b) - 转字符串控制精度用
fmt.Sprintf("%.2f", x),不是四舍五入逻辑,而是 IEEE 754 截断规则 -
金融计算禁用 float —— 即使
float64也存不准 0.1;该用int64存“分”,或引入decimal类库
类型不是语法装饰,是 Go 编译器帮你守住边界的护栏。一旦绕过(比如靠 unsafe 强转或反射抹掉类型),后面所有优化、并发安全、GC 行为都可能失效。









