-
Go 的 HTTP Trailer 读取不到,通常不是字段不存在,而是服务端没有在首次写响应前声明 Trailer,或客户端还没有读完 Response.Body。本文用一个可复用的 httptest 示例说明声明、写入、读取时机,以及动态 TrailerPrefix 的边界。
-
说明 database/sql 中 PrepareContext、Tx.StmtContext 与 QueryContext/ExecContext 的职责区别,给出可复用预编译语句传递请求超时、事务绑定和资源回收的最小方案。
-
使用 Go go/types 分析泛型约束时,可以通过 Union.Len 与 Term 按索引导出联合项,也可以在支持 Go 1.24 的环境中用 Union.Terms 迭代。本文说明如何读取 Term.Type、Term.Tilde,以及空联合项、索引越界和版本兼容边界。
-
以日志提取为例,按 SubexpNames 与位置结果的组号对应关系构造字段映射,区分未匹配、空捕获和可选组缺省,并明确重复名称的处理策略。
-
Go 自定义 MarshalJSON 时直接再次编码原类型会无限递归。本文说明 json.Marshaler 的触发原因,并用新的定义类型复用默认字段编码、追加自定义字段,同时保留错误处理边界。
-
Go context 的 Done 只能通知退出,Err 只能说明取消类别。本文用 WithCancelCause 和 Cause 区分超时、主动取消与业务失败,并解释父子 Context 首次取消的传播边界。
-
通过运行时指标采样场景讲清描述符发现、Kind 类型分派和直方图读取,说明升级兼容、样本复用及独立快照的处理方法。
-
Go testing/synctest.Wait 会等待当前 bubble 内其它 goroutine 进入 durably blocked 状态。本文从最小并发测试、context 取消和虚拟时间三个场景说明它的用法,并梳理外部 I/O、bubble 外 goroutine 与死锁边界。
-
用 Go SQLX 查询一列多行数据时,可以直接用 Select 填充 []string;结果较大或需要处理 NULL 时,再用 Queryx 手动遍历并检查 rows.Err()。
-
Go bitset 的 Complement 计算的是当前 BitSet 长度以内的局部补集,不是无限整数域的补集。本文用 New、Set、Len 和 Count 说明如何明确边界并避免误读结果。
-
Go encoding/hex 的 Dumper 按 hexdump -C 形式把字节写入 io.Writer。若最后一行不足 16 字节,Close 会补齐空白、ASCII 右栏和换行;本文说明 Write、Close、错误处理以及与 hex.Dump 的选择边界。
-
go/build.Context 本身保存构建配置和文件系统回调,不是需要 Close 的资源。本文沿 OpenFile、Import、MatchFile 的调用边界,定位真正未释放的 ReadCloser、文件描述符和外围 goroutine。
-
Go 1.22 的 slices.Concat 可以把多个同类型切片按传入顺序合并成新切片。本文用最小示例说明顺序、空切片、nil 结果、自定义切片类型,以及它与 append 的选择边界。
-
Go 中 select 搭配 default 会把等待变成立即返回;如果外层再套无限循环,就可能形成忙循环并持续占用 CPU。本文从定位、阻塞等待、定时退避、退出信号和运行指标五个角度给出修正写法。
-
用 Go parser.ParseFile 做源码分析时,注释为空或节点位置无法回溯,通常不是 AST 丢了信息,而是漏传 ParseComments、没有复用 token.FileSet,或忽略了解析错误。本文从症状、根因到修复代码说明三者如何配合。