Go语言技术文章
-
Go 的 flag.FlagSet 适合把 start、stop、config 等子命令拆成彼此独立的参数集合。本文从参数隔离开始,说明 ContinueOnError、Usage、Parse 和错误码如何组合,并给出可运行的最小命令行程序。150 收藏 -
Go 测试里 t.Setenv 会修改整个进程的环境变量,并在测试清理阶段恢复原值,因此不能和 t.Parallel 或并行祖先一起使用。本文从失败现象、执行时间线和可复现代码出发,说明如何拆分测试、验证恢复结果,并处理需要并发覆盖的配置场景。168 收藏 -
Go 反射中 CanSet 为 false 通常不是 Set 写错,而是 Value 没有可写地址,或字段受未导出规则保护。本文从 ValueOf、Elem 和结构体字段三个现场定位原因,并给出安全修改与检查方法。295 收藏 -
解释 Go slices.Clip 如何把子切片的容量收紧到长度,结合三索引切片、append 行为和大数组保留场景,给出可运行的验收代码与使用边界。393 收藏 -
Go 1.23 的 slices.Collect 可以把 iter.Seq 收成新切片,但空序列返回 nil,消费过程也只发生一次。本文用过滤、提前停止和容量检查说明它的语义边界与使用方式。357 收藏 -
用 Go 标准库 net/http 的 ResponseController.Flush 实现分段响应,结合 httptest 验证首段数据何时可读,并说明 ResponseWriter 包装、代理缓冲和错误处理边界。497 收藏 -
围绕 database/sql.Rows.NextResultSet 处理多结果集,讲清 Next、Scan、NextResultSet、Err 和 Close 的调用顺序,并用空结果集与驱动支持差异做实战核对。399 收藏 -
Go 客户端明明复用了同一个 http.Transport,却不断新建 TCP 连接,常见原因不是连接池失效,而是响应体没有读完并关闭、每个请求重复创建 Transport,或空闲连接参数与并发量不匹配。本文用可观察的请求流程拆开判断方法。184 收藏 -
用 encoding/json.Decoder 的 InputOffset 和 SyntaxError.Offset 定位坏 JSON,区分字节偏移与字符位置,并给出流式解析、UTF-8 和错误行号的可复用处理方式。299 收藏 -
Golang · Go教程 | 4天前 | 文件处理 · golang · 工程实践 · 路径校验 · 安全编程 · Go archive/tar 路径逃逸 解压安全 filepath.IsLocal
archive/tar 的 Header.Name 不能直接拼接到解压目录。本文从 tar 条目检查、filepath.IsLocal 与 Rel 校验入手,给出拒绝绝对路径和 .. 逃逸的 Go 示例,并补上符号链接、文件大小和失败回滚边界。489 收藏 -
Go 1.20 引入的 http.ResponseController 把 Flush、Hijack、读写超时和全双工读取统一到一个控制入口。本文用最小示例说明它如何工作、何时返回 ErrNotSupported,以及接管连接后必须承担哪些清理责任。186 收藏 -
Go 的 log/slog 用 WithGroup 给字段划分命名空间,但 With、WithGroup 和单次 LogAttrs 的先后顺序会影响最终结构。本文用一个请求日志例子说明字段如何继承、重复键如何处理,以及自定义 Handler 应该怎样保持同样的语义。391 收藏 -
后台任务最难排查的不是启动,而是失败后谁负责停下、错误如何回到请求方、剩余 goroutine 怎样确认已经退出。本文用 Go errgroup 组织并发任务,拆解退出信号、错误回收和最小验收方式。385 收藏 -
Go 1.25 的 trace.FlightRecorder 适合捕获长时间运行服务中的短暂性能异常。本文从缓冲窗口、触发快照、go tool trace 分析和并发边界入手,说明什么时候该用它,以及如何控制内存和文件大小。240 收藏 -
Go 1.25 继续完善 runtime.AddCleanup 的并发清理能力。本文从文件描述符这类外部资源出发,说明它与 SetFinalizer 的语义差异、必须保留的显式 Close,以及 GODEBUG 检查方式。368 收藏