Go问答技术文章
-
多个 Goroutine 并发执行时,errgroup 可以把首个错误、兄弟任务取消和统一等待放进同一条收敛链。本文给出可直接改造的 Go 写法,并说明 Context 必须传到真正执行 I/O 的位置。397 收藏 -
Go 调用方超时并不代表下游工作已经停止。本文用一条清晰的调用链说明如何把 Context 传到真正执行 I/O 的函数,在阻塞点响应取消,并用 cancel 和 Cause 正确收尾。323 收藏 -
WalkDir 返回的是跨平台的 fs 逻辑路径,不是通用的磁盘绝对路径。本文用根目录封装、filepath.FromSlash 和边界判断,说明如何把结果安全交给外部工具。292 收藏 -
多发送者写入同一个 Go Channel 时,关闭责任应由等待所有发送者结束的协调者承担;本文用 WaitGroup 和 Context 说明如何避免重复关闭、发送到已关闭 channel 以及 Goroutine 泄漏。379 收藏 -
WaitGroup 本身没有超时参数。本文用完成通知实现可超时等待,再区分 Context 取消与直接放弃等待,避免把调用方超时误判成任务已停止。398 收藏 -
Go 服务变慢不一定先看 CPU。本文用 block profile 与 mutex profile 的记录语义、采样开关和 pprof 视图,说明如何区分等待方与持锁方,最后把画像结果落到具体同步点。130 收藏 -
遇到 concurrent map writes 不要只给 map 加锁了事。本文从最小复现开始,用 -race 报告定位共享访问,再按互斥、单所有者和 sync.Map 的边界完成修复。496 收藏 -
encoding/json/v2 的 SemanticError 既可能来自请求值不匹配,也可能来自 Go 类型结构问题。本文用字段提取、契约测试和 HTTP 分层策略,说明如何定位 JSON 指针与底层原因。159 收藏 -
Go 接口字段经常变化时,按稳定字段、未知字段和动态内核选择结构体、map 或 json.RawMessage,避免类型断言扩散。375 收藏 -
Go 泛型约束同时要求 comparable 和方法时,值类型不一定拥有指针接收者方法。本文用最小代码拆开方法集、类型约束与三种修复路径,帮助你判断该传值还是传指针。454 收藏 -
解释 Go API 中缺失、null、零值和具体值的区别,比较 omitempty、omitzero 与指针字段,并给出兼容 encoding/json/v2 的落地方案。216 收藏 -
客户端断开后,Go Handler 不会因为看到断开就自动停止全部代码;要让下游 HTTP、数据库和循环及时收尾,必须从 r.Context() 监听取消并继续向下传递。472 收藏 -
Go 泛型调用报“缺少方法”时,问题常常不在约束文字,而在值类型与指针类型的方法集不同。本文用一个可复现的命名接口例子,说明 comparable、指针接收者、隐式取址和编译期断言之间的边界。129 收藏 -
Go 1.27 调整了 //line 与 /*line*/ 中相对文件名的解析方式:它们现在相对包含指令的源文件目录解析,而不是依赖启动编译命令时的工作目录。本文用生成代码目录示例拆解路径、行列号和跨版本核对方法。337 收藏 -
Go项目扫描时,导入依赖提示可能比真实风险更宽。本文用govulncheck和gopls的两类证据,区分模块命中、受影响符号与真实调用链,并整理成可复查的处置记录。266 收藏