Go语言技术文章
-
Go modules 中 replace 写了却仍下载远程模块时,按主模块、require、替换版本和 go list -m -json 结果逐层定位真实来源。409 收藏 -
govulncheck 报告中的 symbol 不是普通关键词,而是漏洞函数或方法在项目调用图中的落点。本文从源码扫描开始,演示如何区分导入命中、真实可达调用和分析边界,并用 traces 与 JSON 固化排障证据。151 收藏 -
遇到 concurrent map writes 不要只给 map 加锁了事。本文从最小复现开始,用 -race 报告定位共享访问,再按互斥、单所有者和 sync.Map 的边界完成修复。496 收藏 -
Go 服务 CPU 飙高、内存上涨或请求变慢时,按症状选择 CPU、heap、goroutine、block、mutex profile,再用 top、list 和对照采样确认热点。314 收藏 -
encoding/json/v2 的 SemanticError 既可能来自请求值不匹配,也可能来自 Go 类型结构问题。本文用字段提取、契约测试和 HTTP 分层策略,说明如何定位 JSON 指针与底层原因。159 收藏 -
govulncheck 的价值不是多报漏洞,而是把模块命中、包导入和漏洞符号可达分层。本文给出调用链核对、构建条件对齐及升级复核方法。445 收藏 -
本地模块修改后 Go 仍使用旧版本时,按 GOWORK、go.work 的 use 路径、go list 目录和 GOWORK=off 对照逐层定位工作区边界。311 收藏 -
Go 接口字段经常变化时,按稳定字段、未知字段和动态内核选择结构体、map 或 json.RawMessage,避免类型断言扩散。375 收藏 -
从请求 Context 派生查询超时,正确使用 QueryContext、关闭结果集并区分取消错误,定位 Go 数据库超时后连接仍被占用的原因。314 收藏 -
Go 泛型约束同时要求 comparable 和方法时,值类型不一定拥有指针接收者方法。本文用最小代码拆开方法集、类型约束与三种修复路径,帮助你判断该传值还是传指针。454 收藏 -
用 Go fuzzing 为解析函数补齐边界输入:从 f.Add 种子、限定 fuzz 时长,到把失败语料固化为可重复的回归测试。168 收藏 -
解释 Go API 中缺失、null、零值和具体值的区别,比较 omitempty、omitzero 与指针字段,并给出兼容 encoding/json/v2 的落地方案。216 收藏 -
Go channel 消费者无法退出时,先用 goroutine profile 找阻塞栈,再用 Context 补取消分支,并按 channel 所有权选择关闭责任。171 收藏 -
Go PGO 没有明显收益时,从生产 profile 的代表性、合并采样时长、default.pgo 位置和 -pgo 对照构建四个边界逐层排查。150 收藏 -
客户端断开后,Go Handler 不会因为看到断开就自动停止全部代码;要让下游 HTTP、数据库和循环及时收尾,必须从 r.Context() 监听取消并继续向下传递。472 收藏