Go语言技术文章
-
Go 服务偶发变慢时,runtime/metrics 能把 GC 频率、暂停和堆目标放到同一组可采样指标里。本文从一次延迟抖动开始,说明如何选指标、对齐时间窗口,并排除把正常回收误判成 GC 压力。278 收藏 -
Go 的一次取值函数适合惰性初始化,但初始化函数一旦 panic,后续调用会再次 panic,而不是自动重试。本文拆开这个语义,给出可观测、可控的失败处理方案。152 收藏 -
Go 的 map range 顺序没有稳定保证,同一张 map 也不能把第一次遍历结果当成下一次的顺序。本文用一个最小示例说明随机化边界,并给出测试、日志和接口输出需要排序时的可靠写法。119 收藏 -
bufio.Scanner 返回 false 不一定代表文件读完了,长 token、SplitFunc 规则和 Err 检查都会改变结果。本文用可运行示例拆开这几个边界,并给出读取大行时的修复方式。454 收藏 -
Go 1.25 的 runtime/trace.FlightRecorder 能持续保留最近一段执行轨迹,在慢请求或健康检查异常时导出现场。本文用一个 100 毫秒慢请求阈值示例,说明 MinAge、MaxBytes、WriteTo 和 go tool trace 的配合边界。336 收藏 -
Go 写文件时,os.File.Sync 成功并不等于包含它的目录项也完成持久化。本文用临时文件、重命名和目录同步的完整流程,说明崩溃恢复时该看哪些边界。410 收藏 -
Go 1.25 将 testing/synctest 从实验功能带到标准库可用状态,本文用超时重试测试说明如何替换旧开关、检查虚拟时间语义并让 CI 稳定验收。245 收藏 -
Go 的 crypto/subtle.ConstantTimeSelect 适合在两个整数结果之间做常量时间选择,但它不能替代完整的密码学实现。本文从掩码、输入约束、编译验收和错误用法说明它的边界。244 收藏 -
context.WithoutCancel 适合让收尾任务忽略上游取消,但它不会自动提供超时、Done 或可用的 Deadline。本文用请求日志落盘和资源清理场景拆开它的边界,并给出可复现的回收与超时写法。189 收藏 -
Go 里读到 io.EOF 不等于所有 Reader 都永久失效。本文用 bytes.Buffer、文件和分块读取场景拆开 EOF 的含义,说明缓冲区复用时该看什么状态,以及如何避免把 EOF 当成普通错误。179 收藏 -
解释 Go 测试中 testing.TB.Cleanup 的执行时机,结合主测试、t.Run 子测试和并行测试,定位清理函数看似没有执行的常见原因。181 收藏 -
Golang · Go教程 | 1个月前 | 并发 · 错误处理 · go · Context · context.WithTimeout context.Cause Go context.WithCancelCause
用一个可运行的 Go 请求链示例说明 context.WithCancelCause 如何区分主动取消、超时和上游失败,并给出错误判断、日志记录与兼容旧代码的检查方法。392 收藏 -
用 Go 标准库 log/slog 的 WithGroup 把请求、用户和数据库字段分组,结合 TextHandler 验证输出结构,并说明 Handler 实现与常见误区。116 收藏 -
从滚动日志窗口的实际场景出发,解释 slices.Clip 如何把切片容量收紧到长度,说明它与 slices.Clone、底层数组和 GC 回收之间的边界。346 收藏 -
解释带 sync.Mutex 的结构体为什么不能随意复制,比较值接收者、指针接收者和容器传参的差异,并给出可运行的验收方法。397 收藏