-
go/types.Config 本身不是需要 Close 的资源句柄。本文按一次类型检查的数据生命周期,说明怎样用堆画像定位真正长期存活的 Package、Info、FileSet、Importer 缓存或增量 Checker,并给出可回收的代码边界。
-
Go flag.FlagSet 参数不生效时,应核对注册集合、Parse 入参和选项位置。本文给出独立解析函数,说明位置参数、布尔赋值、子命令与错误处理的常见问题,并提供排查速查表。
-
Go go/types.Config 看起来不生效,通常是配置没有传给同一次 Check、文件集合不完整、Importer 缺失,或 types.Info 没有初始化。本文按四个对照点定位,并给出可复用的 Config.Check 示例。
-
Go go/types.Config.IgnoreFuncBodies 可以让类型检查器跳过函数体,但不会跳过函数声明、参数和返回值。本文用最小源码分析流程说明它的影响范围、Info 映射的取舍,以及为什么函数体内表达式信息会变得不完整。
-
Go 的 go/ast.Inspect 看起来不生效,通常不是遍历函数没有执行,而是解析错误被忽略、回调类型筛选不匹配、return false 提前剪枝,或把 n == nil 的收尾回调误当成异常。本文从 ParseFile 到位置输出逐步拆解这些边界,并给出可直接改造的排查代码。
-
Go ast.Inspect 不负责关闭文件或清理节点缓存。本文用短作用域计数示例说明资源所有权,区分 AST 引用保留与文件句柄问题,并解释回调返回 false、收到 nil 的真实含义。
-
Go go/ast.Inspect 得到空结果时,通常不是遍历器失效,而是解析结果没有目标节点、回调返回 false 提前剪枝,或统计逻辑忽略了实际节点类型。本文按根节点、回调返回值和 nil 收尾调用拆解这些边界。
-
Go go/build.Context 看似配置了 GOOS、GOARCH 或 BuildTags 却没有生效,通常是调用了 build.Import、路径不是绝对路径,或把 go/build 误当成 go build 的控制器。本文用最小示例拆开这三类边界。
-
go/build.Context 本身保存构建配置和文件系统回调,不是需要 Close 的资源。本文沿 OpenFile、Import、MatchFile 的调用边界,定位真正未释放的 ReadCloser、文件描述符和外围 goroutine。
-
Go ast.FilterDecl 不会筛选参数列表中的名称。本文通过最小示例说明其声明过滤范围、原地修改与返回值含义,并区分签名展示和源码参数重命名所需的处理方式。
-
Go token.FileSet.RemoveFile 后,原来的 Pos 区间不会再被 FileSet.File 或 FileSet.Position 找到,但保留的 *token.File 仍可用于文件级位置换算。本文拆开两层语义,并给出适合流式解析器的释放顺序。
-
Go json.Decoder 没有 Close 方法。本文按底层 Reader 关闭责任、内部缓冲与业务结果引用拆解资源未释放问题,给出文件读取示例,并说明大 JSON 解码和流式读取的处理边界。
-
regexp.Regexp 本身没有需要 Close 的资源。本文从正则调用点出发,使用 pprof 区分内存保留、文件与 HTTP 响应体未关闭,以及 goroutine 阻塞等真正的生命周期问题。
-
Go regexp.Regexp 编译成功却匹配不到时,先保留 Compile 错误,再排查字符串转义、包含匹配与整段匹配、换行和字符范围。本文用最小示例给出一条可复用的定位路径。
-
Go regexp.Regexp 返回空字符串不一定是没有匹配,边界断言和可选量词可能只匹配一个位置。本文用 FindStringIndex 区分 nil、零宽匹配和真实文本,并说明多行模式与中文 边界的处理方式。