Go语言技术文章
-
Go 结构体切片不能直接依赖 slices.Index 做字段条件查询,slices.IndexFunc 更适合表达按 ID、状态或组合条件查找第一条记录。本文用完整示例说明回调、-1 边界、重复匹配和 map 选型。136 收藏 -
Go 切片的 append 是否改写原数据取决于容量和底层数组共享关系。本文结合 slices.Clone 说明如何建立独立写入副本,以及浅复制、nil 和空切片的边界。136 收藏 -
用 Go 的 io/fs.ReadDir 和 os.DirFS 按目录层级筛选文件,解释排序、DirEntry 判断、错误处理与大目录内存边界,并给出可运行示例。135 收藏 -
os.File.WriteAt 要求从指定偏移写入,而 O_APPEND 要求普通写始终追加到文件尾,两种语义互相冲突。本文用一个小型文件补丁工具讲清报错原因、正确打开标志和双句柄设计。135 收藏 -
用 tview Pages 保留主界面并叠加 Modal,结合完整示例说明确认、取消、Esc、移除临时页和焦点恢复,对比隐藏复用与移除重建的生命周期取舍。135 收藏 -
Go sqlmock 适合锁定 SQL 调用、参数和事务契约,真实数据库测试则负责发现方言、模式、约束、索引与事务环境问题。本文用一张边界表说明两者各自能发现什么,以及如何组合回归。135 收藏 -
Go 表驱动测试调用 t.Parallel 后,闭包捕获的用例值和共享切片、map 可能互相污染。本文说明如何复制当前用例、隔离可变夹具,并用 go vet 与 -race 找到剩余风险。135 收藏 -
Go 切片性能优化的关键不是盲目把容量设得很大,而是根据可估算的数据量使用 make 预留容量;本文结合追加、未知数量和基准测试说明 len、cap 与 append 的配合。135 收藏 -
Go 的 os.ProcessState.SysUsage 返回平台相关的资源使用对象,不同系统的底层类型和字段语义并不完全相同。本文从 ProcessState 的生命周期、类型观察、平台适配和生产日志四个方面说明如何安全使用。135 收藏 -
Go 1.27 工具链中的 waitgroupgo 更适合做 WaitGroup 代码现代化迁移。本文区分 go vet 检查与 go fix 差异预览,说明 Add、goroutine、Done 组合的修复顺序,以及闭包、错误处理、递归启动和旧工具链兼容边界。135 收藏 -
sync.Map.CompareAndDelete 可以在 key 的当前值仍等于旧值时删除映射项,适合处理并发缓存和临时索引清理。本文说明 bool 返回值、不可比较旧值、缺失键和与普通 Delete 的边界。135 收藏 -
Go x/net/http2/hpack.Decoder 的输入是压缩后的 HPACK 头部块,解压后的名称和值可能更长。本文说明 SetMaxStringLength 的限制对象、ErrStringLength 的处理方式,以及增量 Write 与 Close 的生命周期边界。135 收藏 -
在 Go LDAP 查询中使用 EscapeFilter 转义用户输入,固定属性名与过滤器模板,并区分过滤器值、DN 和查询结果处理边界。135 收藏 -
go-message 写邮件时,附件 WriteCloser 与外层 Writer.Close 不是同一层职责。本文从 multipart/mixed、传输编码和 MIME 终止边界解释关闭顺序,并给出可处理写入与收尾错误的 Go 示例。135 收藏 -
解释Go snowflake修改Epoch后旧编号时间偏移的原因,区分Node生成状态与全局解码配置,并给出显式历史格式解码器和保留纪元、分版本迁移的方案。135 收藏