Go问答技术文章
-
Go slog.HandlerOptions.AddSource 会让 TextHandler 或 JSONHandler 把日志调用点写入 source 字段,但它需要计算调用栈位置。本文用一个可运行示例说明 source 的来源、包装函数对定位的影响、性能成本与脱敏边界。235 收藏 -
用 Go log/slog 的 WithAttrs 固定请求上下文,理解属性快照、WithGroup 分组继承和重复键的输出边界,并用一个可运行示例核对结果。122 收藏 -
Go slog.Logger.With 会返回带属性的新 Logger,不会改写原 Logger。本文用并发请求和测试场景说明共享字段污染的成因、检查方法、隔离写法与验收边界。473 收藏 -
以一个订单接口为例,拆开 Go 1.27 encoding/json/v2 的迁移步骤,核对字段标签、旧 JSON 兼容性、测试策略与可回滚边界。426 收藏 -
用一个可复现的小例子拆开 strings.CutPrefix 与 HasPrefix 加切片的差别,重点核对 found 返回值、空前缀、相同前缀和 UTF-8 字符边界。338 收藏 -
用 Go 的 io.SectionReader 读取文件片段时,EOF 到底代表成功还是数据不足?本文从偏移量、剩余长度和 ReadAt 行为入手,给出一段可复查的判断代码。342 收藏 -
Go 的 os.File.ReadAt 不应只看 err。本文用固定长度读取场景拆解 n 与 err 的组合,说明完整读取、短读、负偏移和并发读取时该怎样判断与验证。491 收藏 -
context.AfterFunc 的 stop 返回 false,不等于回调丢失;它表示回调可能已经启动,或此前已经停止。本文用连接读超时和资源清理场景拆解停止竞态、完成同步与幂等写法。486 收藏 -
Go 1.26 提供了实验性的 goroutineleak pprof 画像,可在构建时启用后观察疑似泄漏的 goroutine。本文从一个等待链问题切入,说明如何开启、采样、区分真实泄漏与暂时阻塞,并给出回归核对边界。428 收藏 -
Go 测试里 t.Setenv 会修改整个进程的环境变量,并在测试清理阶段恢复原值,因此不能和 t.Parallel 或并行祖先一起使用。本文从失败现象、执行时间线和可复现代码出发,说明如何拆分测试、验证恢复结果,并处理需要并发覆盖的配置场景。168 收藏 -
解释 Go slices.Clip 如何把子切片的容量收紧到长度,结合三索引切片、append 行为和大数组保留场景,给出可运行的验收代码与使用边界。393 收藏 -
用 Go 标准库 net/http 的 ResponseController.Flush 实现分段响应,结合 httptest 验证首段数据何时可读,并说明 ResponseWriter 包装、代理缓冲和错误处理边界。497 收藏 -
Go 客户端明明复用了同一个 http.Transport,却不断新建 TCP 连接,常见原因不是连接池失效,而是响应体没有读完并关闭、每个请求重复创建 Transport,或空闲连接参数与并发量不匹配。本文用可观察的请求流程拆开判断方法。184 收藏 -
Go 的 log/slog 用 WithGroup 给字段划分命名空间,但 With、WithGroup 和单次 LogAttrs 的先后顺序会影响最终结构。本文用一个请求日志例子说明字段如何继承、重复键如何处理,以及自定义 Handler 应该怎样保持同样的语义。391 收藏 -
Go 1.25 的 trace.FlightRecorder 适合捕获长时间运行服务中的短暂性能异常。本文从缓冲窗口、触发快照、go tool trace 分析和并发边界入手,说明什么时候该用它,以及如何控制内存和文件大小。240 收藏