-
解释 Go token.FileSet.AddFile 的 base、size 与 Pos 区间关系,说明旧 base 为什么不能复用,并给出连续加入源码文件的安全写法。
-
x509.Certificate.DNSNames 表示证书 Subject Alternative Name 中声明的 DNS 名称集合。读取它适合做展示和排查;真正判断主机名是否匹配,应优先使用 VerifyHostname,涉及信任链时再调用 Certificate.Verify 并传入 VerifyOptions.DNSName。
-
Go tcell 的 PollEvent 会阻塞等待终端事件,context.Done 或系统信号不会自动让它返回。本文用 EventInterrupt 和 PostEvent 把退出通知送入 tcell 事件流,再由事件循环统一收口,并说明 Fini、ChannelEvents 与重复退出处理的边界。
-
Go HTTP Cookie 是否发送,不只取决于 Cookie 名称,还取决于请求主机和路径。本文用 cookiejar 解释 Path、Domain 的匹配边界,并给出最小排查示例。
-
go vet 的 %w 指针告警不等于禁止指针错误。本文结合值接收者与指针接收者示例,解释错误链动态类型、Is/As 匹配差异,以及保留 CI 检查、记录例外和修复错误契约的方法。
-
Go 批量导入后出现 too many open files,通常与 os.File 未及时 Close、循环 defer 作用域过大或并发峰值过高有关。本文给出单文件生命周期、受控并发和 Linux fd 排查方法。
-
Go net/http 中的 Transfer-Encoding 不是普通 Header。本文解释为什么 Header.Set 不能作为可靠控制入口,如何让库根据请求体和长度自动决定,以及何时应设置 Request.TransferEncoding。
-
Go 中格式化时间字符串适合展示,不适合作为通用的先后判断依据。本文用跨月份、时区和精度的例子说明字符串比较为什么会误判,并给出基于 time.Time、Before、After、Equal 与 Compare 的稳妥写法。
-
Go 1.27 的 httptest.NewTestServer 默认使用内存网络,适合放进 testing/synctest 的并发测试 bubble。本文说明怎样使用 server.Client 发请求、为什么不应调用 Start、URL 和配置的边界,以及 testing.TB 自动清理与 NewServer loopback 模式的区别。
-
Go archive/tar 读取 PAX 长路径时,直接使用 Reader.Next 返回的 Header.Name 即可;本文给出最小读取、内容消费和安全提取写法。
-
Go 测试辅助函数不必手动拼接父子测试名称,传入 *testing.T 后调用 t.Name() 即可获取当前测试或子测试的完整名称。本文说明表驱动测试、t.Helper 配合方式,以及名称作为诊断信息时的边界。
-
maps.Keys 返回的是可迭代的键序列,不是现成切片。本文用 Go 1.23 的 range 语法收集 map 键,说明 nil map 与空 map 的结果,并提醒 map 键的迭代顺序不能当成稳定排序。
-
Go 的 uint64 乘法只保留低 64 位,需要完整结果时应使用 math/bits.Mul64 获取 hi 和 lo。本文进一步说明如何用值类型结构体、定长切片和容量预分配处理批量乘法,减少扩容、格式化和临时对象带来的额外分配。
-
Go 依赖升级后出现接口不兼容,先不要盲目回退。本文用 go.mod、go list -m、go mod graph 和编译错误把问题分成导入路径变化、公开 API 断裂与间接依赖切换三类,再给出回退、迁移和兼容适配的选择方法。
-
Go gzip.Reader 默认会把拼接的多个 gzip 成员连续解压。本文说明 Multistream(true) 的默认语义,以及怎样用 Multistream(false)、io.ByteReader 和 Reset 按成员读取。