Go问答技术文章
-
Go ast.Inspect 不负责关闭文件或清理节点缓存。本文用短作用域计数示例说明资源所有权,区分 AST 引用保留与文件句柄问题,并解释回调返回 false、收到 nil 的真实含义。365 收藏 -
Go go/ast.Inspect 得到空结果时,通常不是遍历器失效,而是解析结果没有目标节点、回调返回 false 提前剪枝,或统计逻辑忽略了实际节点类型。本文按根节点、回调返回值和 nil 收尾调用拆解这些边界。329 收藏 -
Go go/build.Context 看似配置了 GOOS、GOARCH 或 BuildTags 却没有生效,通常是调用了 build.Import、路径不是绝对路径,或把 go/build 误当成 go build 的控制器。本文用最小示例拆开这三类边界。388 收藏 -
go/build.Context 本身保存构建配置和文件系统回调,不是需要 Close 的资源。本文沿 OpenFile、Import、MatchFile 的调用边界,定位真正未释放的 ReadCloser、文件描述符和外围 goroutine。169 收藏 -
Go ast.FilterDecl 不会筛选参数列表中的名称。本文通过最小示例说明其声明过滤范围、原地修改与返回值含义,并区分签名展示和源码参数重命名所需的处理方式。322 收藏 -
Go token.FileSet.RemoveFile 后,原来的 Pos 区间不会再被 FileSet.File 或 FileSet.Position 找到,但保留的 *token.File 仍可用于文件级位置换算。本文拆开两层语义,并给出适合流式解析器的释放顺序。210 收藏 -
Go json.Decoder 没有 Close 方法。本文按底层 Reader 关闭责任、内部缓冲与业务结果引用拆解资源未释放问题,给出文件读取示例,并说明大 JSON 解码和流式读取的处理边界。338 收藏 -
regexp.Regexp 本身没有需要 Close 的资源。本文从正则调用点出发,使用 pprof 区分内存保留、文件与 HTTP 响应体未关闭,以及 goroutine 阻塞等真正的生命周期问题。479 收藏 -
Go regexp.Regexp 编译成功却匹配不到时,先保留 Compile 错误,再排查字符串转义、包含匹配与整段匹配、换行和字符范围。本文用最小示例给出一条可复用的定位路径。499 收藏 -
Go regexp.Regexp 返回空字符串不一定是没有匹配,边界断言和可选量词可能只匹配一个位置。本文用 FindStringIndex 区分 nil、零宽匹配和真实文本,并说明多行模式与中文 边界的处理方式。309 收藏 -
Go template.Template 看起来不生效,通常不是模板对象失效,而是 Parse、Execute、命名模板、数据字段或 FuncMap 的边界没有处理好。本文按最小代码、文件模板和并发复用逐层排查,并保留真实错误信息。451 收藏 -
区分 Template 普通对象、FuncMap 闭包、模板缓存及输出文件的生命周期,提供文件关闭示例,并按句柄、缓存和引用保留定位问题。181 收藏 -
Go template.Template 得到空结果时,先分清空根模板、执行了错误的命名模板、空管道和缺失 map 键。本文用 DefinedTemplates、Lookup、ExecuteTemplate 与 missingkey 给出可复现的排查路径。106 收藏 -
Go 的 sql.Rows 出现连接池等待或资源未释放时,先确认 Rows.Close 与 Rows.Err 的生命周期,再结合 DB.Stats、goroutine 和驱动日志定位真正的拥有者。本文给出可复用的代码与排查顺序。256 收藏 -
Go reflect.MapIter.Reset 传入 reflect.Value{} 可以解除迭代器对原 map 的引用,但不会清空 map 或强制垃圾回收。本文说明遍历结束后的脱钩位置、迭代器复用条件,以及其他引用仍存活时的边界。436 收藏