Go语言技术文章
-
围绕 Go database/sql 事务的开启、错误回滚、Rows 清理与 Commit 未知状态,整理一份可直接用于代码审查和上线前检查的清理清单。209 收藏 -
CGO_ENABLED=0 会让导入 C 的 Go 文件不参与构建,因此某些依赖会直接失去实现。本文按 cgo 构建约束、CgoFiles、CC 与目标平台四个输入定位原因,再决定使用纯 Go 替代还是补齐 C 编译链。208 收藏 -
Go netip.ParseAddrPort 可以把带数字端口的 IPv4 或 IPv6 文本解析为 AddrPort,再通过 Addr 和 Port 读取结构化结果。本文说明方括号、非法输入、主机名和 SplitHostPort 的边界。208 收藏 -
围绕 encoding/xml.Decoder.Token 讲清混合 XML 节点的顺序读取、StartElement 分派、CharData 处理和 Skip 跳过嵌套子树,给出可复用的 Go 遍历函数与边界处理方式。208 收藏 -
Go 项目把模板放进 embed.FS 后,不能继续按操作系统文件路径理解它。本文用 text/template.ParseFS 读取嵌入文件,说明 glob 模式、模板名称、ExecuteTemplate 和常见错误之间的关系。208 收藏 -
Go 错误被 fmt.Errorf 包装后,直接比较往往失效。本文用错误树说明 errors.Is 的匹配规则、%w 包装、哨兵错误和自定义 Is 方法的边界。208 收藏 -
从时区形态、layout 占位符、Parse 与 ParseInLocation 的区别入手,定位 Go 时间字符串解析失败,并给出稳定的选择规则。208 收藏 -
本文围绕 Go hash/maphash Seed 说明初始化、独立使用、多个 Hash 复用、并发边界与进程生命周期,帮助读者避开零 Seed、跨进程持久化和密码学误用。208 收藏 -
Go compress/flate 的 Write 只接收输入,Writer.Close 才负责把待处理数据和压缩流结尾写入底层 Writer。本文区分 Flush、Close、Reset 的职责,说明底层写入错误如何传回,以及流式压缩在文件、内存和网络场景中的收尾方式。208 收藏 -
用 github.com/evanphx/json-patch/v5 的 MergeMergePatches 合并两份 JSON Merge Patch,并说明补丁顺序、null 删除、嵌套对象和数组整体替换的边界。208 收藏 -
说明 Goose 数据库版本记录不能替代 Down 实现,提供不连接数据库的迁移定位程序,区分 SQL、嵌入资源和 Go 注册迁移,并梳理原发布产物恢复与前向修复选择。208 收藏 -
Go 使用 go-i18n 做本地化时,可以把数量放进 LocalizeConfig.PluralCount,让 Localizer 按语言规则选择 One、Other 等复数模板;本文说明 Message、TemplateData 与迁移回归边界。208 收藏 -
Go go-colorful RGB插值与Lab插值有什么区别:从同一组起止颜色出发,比较 BlendRgb 和 BlendLab 的中间色路径,并给出 IsValid、Clamped 与场景选择建议。208 收藏 -
Go sync.Cond 的 Signal 和 Broadcast 只是唤醒等待者,不能替代共享条件本身。本文用一个受 Mutex 保护的队列状态说明为什么 Wait 必须放在 for 条件循环中,以及如何在状态更新后选择 Signal 或 Broadcast,避免先检查后等待、误用 if 和忘记解锁。208 收藏 -
Go 1.22 起 archive/zip.Writer.AddFS 可以从 fs.FS 遍历目录并按原结构写入 ZIP。本文给出完整写法,说明 AddFS 与 Close 的错误处理,以及需要过滤文件或修改元数据时的取舍。208 收藏