-
发布 Go 模块时,不能只检查 vendor 目录是否存在。通过重新生成 vendor、对照 vendor/modules.txt 和强制 -mod=vendor 构建,可以及时发现依赖版本漂移。
-
多个 goroutine 共用一个 channel 时,不要让任意发送方直接关闭它。本文用 WaitGroup 统一等待发送方,用协调者关闭数据 channel,并用 done 处理接收方提前退出,避免 send on closed channel 和发送 goroutine 泄漏。
-
Go 的 math/big.Rat 用任意精度分子和分母保存有理数,适合金额比例、配额和分数计算。本文说明如何创建、解析、运算和格式化 Rat,并划清与 float64 及浮点输出的边界。
-
用 Go 的 encoding/xml 流式读取 XML 时,EndElement 不是靠字符串猜测匹配。本文用 xml.Name 栈解释嵌套结束标签、自闭合标签、命名空间和 io.EOF 的判断方式。
-
用 Go 的 http.ServeContent 处理 Range 请求,关键是传入支持 Seek 的 io.ReadSeeker,并通过 206、Content-Range、Content-Length 和 416 判断区间是否读取正确。
-
围绕 Go os/exec 的 StdoutPipe 说明 Start、读取、Wait 的正确顺序,并区分输出读取错误、退出错误与 stderr 诊断信息。
-
Go gzip.Reader 默认会连续解压拼接成员。本文用 Multistream(false)、bufio.Reader 和 Reset 逐段取得每个成员的 Header 与正文,并加入单成员大小限制、错误处理和安全落盘边界。
-
Go execution trace 看不到自定义任务区域,通常与采集窗口、Task 与 Region 的边界、Context 传递或查看范围有关。本文按四个检查点定位原因,并给出可复用的 runtime/trace 写法。
-
Go embed.FS 提供内嵌文件树,但文件系统根和 HTTP 公开前缀是两层路径。本文用 fs.Sub、http.FS、http.FileServer 与 StripPrefix,把 web/index.html 稳定挂到 /assets/index.html,并说明尾斜杠、目录索引和暴露边界。
-
Go GJSON 处理 JSON 数组时,可以用 #.字段提取所有元素的同名字段,用条件查询后再投影,或用多路径一次构造只包含指定键的对象。本文给出当前写法、缺失字段处理和旧查询语法迁移边界。
-
Go 的 json.Decoder 面向 JSON 输入流,单次 Decode 成功不代表请求体已经结束。本文用第二次 Decode 严格要求 io.EOF,拒绝第二个 JSON 值、非法尾部字符和空请求体,并说明它与 DisallowUnknownFields、请求体大小限制的区别。
-
Go database/sql 事务提交后 Rows 仍未关闭,通常与提前退出、未检查 Rows.Err 或把 Commit 当成 Close 有关。本文给出提交前显式关闭结果集、错误回滚和连接池排查方法。
-
Go 上传接口应在首次读取前包装 MaxBytesReader,并识别 MaxBytesError 返回 413。通过原始正文示例说明 ContentLength、完整读取、multipart 内存阈值、临时文件清理及单文件限制的区别。
-
Go 的 net/http 并没有公开的 Cookie.DomainMatches 方法。本文对比 CookieJar 的真实发送行为与自定义域名判断函数,说明精确匹配、点号边界、HostOnly 和 IP 地址的处理方式。
-
Go log/slog 的 Record 是带有隐藏属性状态的日志记录。本文说明普通赋值为什么可能共享状态,怎样用 Record.Clone 安全复制,并结合 AddAttrs、Attrs、Handler 分支和 NewRecord 给出可落地的选择。