Go语言技术文章
-
Go 使用 bufio.Writer 写文件时,Write 成功不等于内容已经落盘。本文拆开 Flush、Sync、Close 的责任边界,并给出可返回错误的关闭流程与最终内容校验方法。103 收藏 -
讲清 Go reflect.Value.IsZero 在 nil 接口、typed nil 指针和接口容器之间的判断边界,给出先检查 IsValid 的安全写法与复查清单。413 收藏 -
Go Scanner 默认只能缓冲有限大小的 token,遇到超长日志会返回 token too long。本文说明如何在 Scan 前正确设置 Scanner.Buffer,以及何时改用 bufio.Reader 分片读取。212 收藏 -
Go 标准库 maps.Clone 可以复制 map 的顶层键值结构,并保留 nil 输入的语义。本文用最小示例说明普通复制、nil 与空 map、浅复制边界、自定义 map 类型和旧环境替代写法。423 收藏 -
Go os.OpenFile 的 perm 不是最终权限。本文用 umask、stat、UID/GID 和挂载状态拆解容器中权限看似失效的原因,并给出最小权限修复方法。366 收藏 -
Go 1.23 的 slices.Collect 可以把 iter.Seq 迭代器结果收集成新的切片。本文说明 slices.Values、自定义序列、nil 结果、深拷贝边界,以及已知长度时如何用预分配 append 控制容量。432 收藏 -
Go 文件在 Linux 能打开但 Windows 失败,通常是手写分隔符、盘符或相对路径基准不一致。本文用 filepath.Join、FromSlash、ToSlash 和 PathError 给出排查与修复方法。111 收藏 -
slices.Clip 会把 Go 切片的 cap 收紧到 len,避免后续 append 复用多余容量;但它不复制底层数组,真正要释放长期持有的大数组仍需建立独立副本。478 收藏 -
讲清 Go atomic.Value 零值 Load、首次 Store 类型确定、sync.Once 懒初始化和不可变配置快照之间的边界,避免 nil 与类型不一致 panic。314 收藏 -
用一个 Go 类型约束同时覆盖整数底层类型和自定义方法,讲清 ~T、定义类型、类型别名与方法集之间的关系。468 收藏 -
Go test -race 通过并不等于业务状态一定一致。本文从执行覆盖、同步关系和多字段不变量三层排查数据异常,并给出可复查的修复清单。479 收藏 -
Go 1.27 已支持具体类型的泛型方法,但旧工具链、低版本 go.mod 和接口方法仍有边界。本文用 Box、Pair 示例说明排错与兼容写法。163 收藏 -
Go 的 sync.RWMutex 不支持从 RLock 原子升级到 Lock;持有读锁时申请写锁会等待自己释放读锁,本文用等待关系解释死锁,并给出释放后重取和拆分状态锁的修复写法。120 收藏 -
用 ~ 底层类型约束定义可参与运算的 Go 泛型函数,让 PriceCents、Meters 等自定义数值类型复用 Sum,并理解类型推断和混合参数的边界。408 收藏 -
Go 结构体复制 sync.Mutex 后可能出现解锁异常、竞态或保护失效。本文解释锁状态为何分裂,并用指针接收者、go vet -copylocks 和 -race 给出排查修复方法。189 收藏