-
sync.Map.CompareAndSwap 返回 false 不会指出改写者,也不提供失败时的旧值。通过可比较结构体携带版本、写入者与操作标识,并区分后续 Load 观察、键删除及类型差异,避免错误归因。
-
Go generate 可以通过 package 路径、同目录 Go 文件列表以及 -run、-skip 精确缩小生成范围。本文结合注释触发、执行顺序和失败边界,说明如何只对指定包运行代码生成指令。
-
Go database/sql 读取多个结果集时,要在当前结果集内用 Next 和 Scan,读完后用 NextResultSet 切换,并在两个 false 边界检查 Rows.Err。本文给出不依赖具体存储过程语法的通用读取骨架。
-
sql.NamedArg 只是把参数名称和值交给 database/sql,能否按名字绑定还取决于驱动的占位符语法和 NamedValueChecker 等接口。本文拆开参数转换链,说明为什么有些驱动必须改用位置参数,以及如何保持参数化查询。
-
Go go list -test -json 展示测试构建相关包信息,配合 -deps 可展开依赖包对象。说明 ImportPath、ForTest、DepOnly、测试导入字段及连续 JSON 解码的使用方式。
-
Go HTTP/1 服务端默认会在写响应前处理未读请求体。本文用 http.ResponseController.EnableFullDuplex 说明正确调用时机、分块读写、Flush、HTTP/2 差异和 ErrNotSupported 边界。
-
Go 的 time.Duration 底层是纳秒数,但配置通常需要 500ms、2s 这样的可读文本。本文区分 String 与 ParseDuration 的职责,并用一个轻量 DurationText 适配文本配置、错误处理和 JSON 字符串字段。
-
Go container/heap 修改优先队列元素后,不需要先 Remove 再 Push。维护 Item.index,在修改 priority 后调用 heap.Fix,就能以 O(log n) 恢复堆序;本文同时说明 Swap、出队和失效索引的边界。
-
Go container/ring 的 Unlink 从当前节点之后摘除连续节点,并返回独立子环。用六节点示例说明数量取模、锚点选择、剩余长度与返回值别名,以及严格数量包装方式。
-
Go time.Timer.Reset 的 true 和 false 不是成功失败,而是表示旧定时器在调用前仍 active,还是已经到期或停止。本文比较两种状态下的下一次触发、t.C 接收和 Go 1.23 之后的旧值语义,并给出可复用写法。
-
Go 的 time.LoadLocationFromTZData 可以直接从标准 IANA TZif 字节创建 Location,适合把时区数据随程序一起打包。本文说明数据来源、参数语义、错误处理以及与 ParseInLocation 的组合方式。
-
Go testing.B.ReportMetric 可以在标准基准结果之外增加自定义吞吐指标。本文从单位名、b.N 除数和 b.Elapsed 时间基准入手,说明 /op、/ns、重复覆盖、内置指标覆盖与 ResetTimer 的使用边界。
-
独立运行 Go 测试二进制时,用 go tool test2json 配合 -test.v=test2json 输出逐行 JSON 事件。说明参数归属、流式解码、测试失败识别及原始日志保存方式。
-
Go 基准测试中的 b.Cleanup 会在基准函数和子基准完成、计时停止后执行,清理回调本身不会计入 ns/op,但回调登记动作若放进循环仍会计时。本文对比 b.Loop、b.N、defer 与手动 Close 的资源边界。
-
围绕 Go base64.NewDecoder 的流式读取,区分正常 EOF、残缺量子导致的 io.ErrUnexpectedEOF 与非法字符导致的 CorruptInputError,并给出先消费 n 再处理 err 的代码模式。