-
Go go/build.MatchFile 判断的不是孤立文件名,而是文件扩展名、GOOS/GOARCH 后缀、文件头构建约束与 Context 配置的组合。本文用跨平台源码扫描场景拆开这些条件,并给出可复用的调用方式。
-
Go ast.FilterFile 不只是按名称裁剪顶层声明,它还会无条件移除导入声明。本文用一份带导入、类型和函数的 AST 拆开过滤边界,说明返回值、字段过滤和保留原始导入的处理选择。
-
Go go/doc.ToText 可以把文档注释写成适合终端阅读的纯文本。本文拆开 prefix、codePrefix、width 的作用,说明链接识别限制,并给出迁移到 Package.Text 与 comment.Printer.Text 的选择方法。
-
Go 自动生成文档时,可以用 go/doc.Filter 把文档树裁剪成公开 API 视图。本文从 Package.Filter 的实际行为出发,说明名称过滤器、类型成员边界、包注释清空和复制文档对象时的取舍。
-
面向以 -cover 构建的长期运行程序,说明 Go runtime/coverage.WriteCountersDir 生成的计数快照如何与匹配的元数据配合,并用 go tool covdata 做汇总分析。
-
Go sync.RWMutex.TryLock 会尝试获得写锁并立即返回结果。本文用缓存刷新场景说明它与 Lock 的阻塞差异、成功后的 Unlock 责任,以及何时可以跳过一次写入、何时必须排队完成。
-
面向以 -cover 构建的长期运行程序,说明 Go runtime/coverage.WriteMetaDir 如何写出覆盖率元数据、如何准备目录,以及它与计数快照的边界。
-
Go sync.Mutex.TryLock 返回 false 代表没有获得锁,不代表锁已经解锁。本文用最小代码说明成功分支的 defer Unlock、失败分支的直接返回,以及 TryLock 的兼容与使用边界。
-
Go 反射遍历 map 时,MapIter.Value 会返回当前元素的 reflect.Value;Value.SetIterValue 可以在目标 Value 可设置且类型可赋值时直接接收当前值,避免额外构造一个 Value。本文给出复制循环、边界条件与回退清单。
-
在反射构造切片时,reflect.Value.Grow 可以提前保证追加空间,但它只接受可设置的 Slice Value,不改变切片长度。本文从批量映射场景出发,梳理 Grow 与 append、SetLen 的职责,以及 Kind、CanSet、负数参数和容量溢出的 panic 边界。
-
Go database/sql/driver.Validator 的 IsValid 只返回布尔值,不会直接返回 ErrBadConn。本文结合连接归还池的时机,说明 false 如何让失效连接被丢弃,以及 ErrBadConn 何时才适合交给 database/sql 触发新连接重试。
-
PATH 是多个路径组成的列表,不能用 filepath.Split 当作单一路径处理。本文对比 ListSeparator 与 Separator,说明 Go 中如何跨平台拆分 PATH,以及空输入、清理和绝对化的边界。
-
Go os.Pipe 的读端提前关闭后,写端继续写入可能得到 broken pipe。本文从两端关系、关闭时机、错误分类和子进程通信场景说明原因,并给出可复用的处理策略。
-
本文从 database/sql 的调用路径出发,区分 sql.DB.Ping、PingContext 与 driver.Pinger.Ping 的职责,说明驱动怎样报告失活连接,以及应用如何把超时和单连接错误接回连接池策略。
-
Go 用 bufio.Writer.ReadFrom 复制大文件时,Reader 的短读通常不是错误,底层 Writer 的短写则必须通过 ReadFrom 和最后一次 Flush 的错误共同判断。本文按调用路径说明快速路径、缓冲区、io.ErrShortWrite 与 io.ErrNoProgress 的处理方式。