go基本数据类型共五类:bool、整数、浮点、复数、string,无隐式转换;int位宽依赖goarch(amd64为int64,386为int32),跨平台易出错;string是只读utf-8字节序列,索引操作需转rune;大量拼接用strings.builder;float比较须用math.abs(a-b)。

Go 的基本数据类型就五类:bool、整数(int/uint 系列)、浮点(float32/float64)、复数(complex64/complex128)、string——没有隐式转换,用错一个类型,编译器立刻报错。
为什么 int 不是固定 64 位?
因为 int 的位宽取决于运行环境:runtime.GOARCH 是 amd64 时它是 int64,是 386 时就是 int32。跨平台编译或与 C 交互时,int 容易变成“隐形炸弹”。
- 需要确定大小的场景(如二进制序列化、数据库字段映射、RPC 协议)——一律用
int64或int32 - 查当前环境:
fmt.Println(runtime.GOARCH) - 别用
int接os.Read()返回的int做循环上限——32 位系统下读大文件可能提前截断
字符串按字节索引会切坏中文?
会。"你好"[0] 拿到的是 UTF-8 编码的第一个字节(0xe4),不是字符 ‘你’;直接 s[0] = 'x' 还会编译失败——string 是只读字节序列。
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
- 要遍历字符(rune):
for _, r := range s { ... } - 要取第 N 个字符:
runeSlice := []rune(s); char := runeSlice[0] - 要修改内容:先转
[]byte,改完再转回string(注意:仅限 ASCII 场景;含中文时需按 rune 处理逻辑) - 拼接大量字符串?别用
+=,用strings.Builder
float64 比较为啥总返回 false?
因为浮点运算是近似计算。0.1 + 0.2 == 0.3 在 Go 里恒为 false——这不是 bug,是 IEEE 754 标准的必然结果。
- 金融计算禁止用 float,存“分”用
int64,或引入github.com/shopspring/decimal - 科学计算中比较两个 float:用
math.Abs(a-b) ,而不是 <code>== -
float32精度仅约 6–7 位十进制,float64是 15–16 位;图像批量处理可选float32节省内存,其他默认用float64
最常被忽略的其实是零值语义:声明但未赋值的 int 是 0,bool 是 false,string 是 ""——它们无法区分“用户没填”和“用户明确填了空值”。真要表达“未设置”,得用 *int、*bool 或自定义类型加状态枚举。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










