-
Go 用 JSONDecoder 连续读取多个对象时,常见问题不是 Decode 自动串数据,而是输入边界、数组边界和内部预读被混在了一起。本文给出连续 Decode、io.EOF、InputOffset 和 Buffered 的迁移边界。
-
go-vcard 的 Card 用 map[string][]*Field 保存属性,同一个键可以对应多个字段。Add 会追加字段,Set 会把该键替换为只含一个字段的切片,因此两者产生不同数量是明确的容器语义。
-
解释 runtime.NumCPU 与 runtime.GOMAXPROCS(0) 的差异来源,结合显式配置、CPU 亲和性、Linux cgroup CPU 限额和 Go 1.25 容器感知默认值,帮助排查时判断何时正常、何时需要调整。
-
Go database/sql 事务提交后查询不到数据,通常不是 database/sql 缓存了旧结果,而是写入或提交错误被忽略、上下文取消、读写 DSN/schema 不一致、查询条件变化或读到了尚未同步的副本。本文用最小复现固定 BeginTx、Exec、Commit 和读回,再按六类分支定位问题。
-
time.Ticker.Reset 会停止当前计时并按新周期重新计时,下一次 tick 要等新周期经过。本文从批处理场景拆解立即触发的常见误判,并给出只创建一个 ticker、单点重置、可停止和可审计的实现方式。
-
Go 的 os.ReadDir 会按文件名排序,而 File.ReadDir 按目录顺序读取。本文解释两者差异、字典序与自然排序的边界,以及 n 参数和 io.EOF 的处理方式。
-
net.LookupCNAME 返回的是跟随零条或多条 CNAME 后的规范化名称。判断查询是否失败要先看 err;没有显式 CNAME 但主机能解析到地址时不一定是错误,需要上下文时使用 Resolver.LookupCNAME。
-
Go x/text/secure/bidirule 按 RFC 5893 实现双向文本规则。本文说明混合左右方向字符为何可能不合法,拆解 LTR/RTL 标签、EN/AN 数字冲突、末尾字符约束,并给出 ValidString 与 Transformer 的 Go 用法。
-
Go 的 Color.RGBA 返回 alpha 预乘的 16 位通道,而 NRGBA 结构体保存非预乘的 8 位字段。本文用 NRGBAModel.Convert 处理 RGBA、NRGBA 与半透明像素转换,避免重复乘 alpha。
-
Go types.Package.Imports 返回的是当前包的直接导入列表,不是完整传递依赖闭包。本文解释源码顺序、export data 例外,以及如何递归遍历并按包路径去重收集传递依赖。
-
解释 Go Request.Clone 对 Header、context、URL 与 Body 的复制边界,给出并发复用请求模板时的防污染写法。
-
Go x/text/language 的 Low 表示匹配时从多个候选中选出较可能的结果,不等于 BCP 47 标签解析失败。本文区分 Parse、Matcher.Match、tag、index 和 Confidence,并给出 Low、No 与 error 的正确处理方式。
-
DB.Stats 的 MaxIdleClosed 是因 SetMaxIdleConns 关闭连接的累计次数,不等于连接泄漏。本文拆开空闲数量回收、空闲时间回收和生命周期回收的区别,并给出用 DBStats 快照排查连接池的 Go 写法。
-
regexp.Regexp 的 FindAllSubmatchIndex 返回每次匹配及捕获组在原始字节数据中的起止位置。本文用一个可复用的 Go 示例说明下标布局、可选组的 -1 结果、中文 UTF-8 字节边界和定位函数封装。
-
Go 泛型里的 any 是普通空接口,而带类型元素的接口约束只描述允许的类型集合,不能直接当作变量类型。本文用最小示例拆开两者差异,并给出保留 T、转为 any 和定义方法接口的修复方案。