Go语言技术文章
-
用 Go 1.27 的 goroutineleak profile 给集成测试增加可留存的并发泄漏证据,掌握 pprof 入口、测试采集、结果解读与 CI 边界。190 收藏 -
Go 结构体复制 sync.Mutex 后可能出现解锁异常、竞态或保护失效。本文解释锁状态为何分裂,并用指针接收者、go vet -copylocks 和 -race 给出排查修复方法。189 收藏 -
用 Go archive/tar 解压时,先按 Header 区分目录、普通文件和链接,再把普通文件复制到安全目标路径,避免目录误写和归档路径越界。189 收藏 -
Go runtime.SetFinalizer 遇到引用环时,垃圾回收无法安排满足依赖关系的终结顺序,终结器执行并不保证。本文用最小对象图说明原因,并给出断开回指、显式 Close 和可靠测试的处理方式。189 收藏 -
通过 Go encoding/xml 的 UnmarshalXML 将旧字段名、属性和文本金额映射到领域结构,并用 DecodeElement 控制单元素消费与错误边界。189 收藏 -
Go encoding/csv Reader 的 FieldsPerRecord 设为 -1 后可以读取列数不同的合法 CSV,再由业务层校验必需字段、最大列数和异常记录。189 收藏 -
Go image.Decode 返回 image: unknown format,通常是 JPEG 或 PNG codec 没有注册。本文解释空白导入触发 init 注册的原因,并比较通用解码、专用解码与 DecodeConfig 的适用边界。189 收藏 -
Go 中可寻址的值能调用指针接收者方法,是编译器对方法调用做了隐式取地址;接口实现仍严格取决于静态类型的方法集。本文用最小示例解释 T 与 *T 的差异,并给出赋值、API 设计和编译期断言的修复建议。189 收藏 -
Go 的 omitempty 在 encoding/json v1 中不会把值结构体当作空值。本文拆解零值判定规则,并对比指针、omitzero、IsZero 与自定义编码方案。189 收藏 -
Go 后台任务不应只用一条裸 goroutine 启动。本文实现 Start、Cancel、Wait 三段式生命周期,统一任务所有权、取消原因、退出等待、超时关闭和错误返回,并说明适用边界与测试要点。189 收藏 -
goroutine 返回不会自动通知其他等待者。本文对比 close(done)、sync.Cond.Broadcast 和 sync.WaitGroup,说明如何发布终态、保护共享状态并避免等待者永久阻塞。188 收藏 -
用 sync.WaitGroup 负责并发任务的完成计数,再配合带容量错误通道与 errors.Join 汇总每个任务的失败原因,覆盖 Add、Done、Wait、close 的时机和取消边界。188 收藏 -
围绕 go generate 的指令、工作目录、环境变量和输出边界,整理一套可重复执行的 Go 代码生成方案,并给出 CI 差异检查清单。188 收藏 -
解释 Go archive/tar 中 PAX 扩展记录的合并和写入优先级,定位 Header 重建导致的字段丢失,并给出可复查的保留写法。188 收藏 -
用 Go archive/tar 解包时,不能只把 Header.Name 与目标目录 Join 起来。本文用文件名本地化检查、条目类型拒绝和 os.Root 根目录写入约束,给出一套可落地的安全解包方案。188 收藏