Go语言技术文章
-
Go 的 exec.Cmd.Wait 不只等待子进程退出,还会等待标准输入输出相关的复制协程。若后代进程继承 stdout 或 stderr 的写端,父进程退出后仍可能等不到 EOF。本文说明如何排查 StdoutPipe 读取顺序,使用 WaitDelay 设定收口上限,并区分 ErrWaitDelay、ExitError 与上下文取消。460 收藏 -
Go 信号处理偶发丢失,通常要从 NotifyContext 的注册时机、context.Done 的观察位置和 stop 的清理时机分层排查。本文给出一套统一退出入口,说明第一轮信号、收尾阶段和 stop 恢复默认行为之间的边界。139 收藏 -
Go plugin 的 Lookup 找不到符号时,先区分插件打开失败与符号查询失败,再检查导出规则、名称拼写、构建方式和宿主插件的工具链一致性。470 收藏 -
Go 模块路径和本地目录显示不一致时,先用 go env 确认主模块与工作区,再用 go list -m -json 对照 Path、Replace、GoMod 和 Dir,最后检查 require、replace 与 go.work 的作用范围。215 收藏 -
Go 依赖下载失败要区分模块代理与校验服务。本文解释 GOPROXY 回退、GOSUMDB 与 go.sum 的职责,并给出固定单模块项目准备 vendor、工具链及离线构建的方案。228 收藏 -
Go generate 在 CI 中报找不到命令,通常不是指令没有执行,而是生成器不在 PATH、工作目录与预期不同,或工具安装步骤没有进入同一个 job。本文按命令解析、包源目录、PATH 和流水线检查点给出稳定排查与配置方法。109 收藏 -
Go fuzz 语料变多时,先区分可提交的种子与失败样本,再隔离 $GOCACHE/fuzz 生成缓存,最后用运行时长和清理策略控制 CI 磁盘占用。389 收藏 -
Go ResponseRecorder 测试通过不代表客户端响应正确。本文以 HEAD 请求对比内存记录与真实服务器,说明头快照、Flush 和接口能力边界,并给出分层测试方案。443 收藏 -
Golang · Go问答 | 2星期前 | CGO · 垃圾回收 · Go问答 · Go CGO runtime.KeepAlive runtime/cgo.Handle runtime.Pinner Go指针回收
Go cgo 场景里,runtime.KeepAlive 只能把 Go 对象的可达性延长到指定位置,不能允许 C 在调用返回后继续保存普通 Go 指针。本文按同步调用、异步保存和 Go 值传递三个边界,说明 KeepAlive、Pinner、cgo.Handle 与 C 内存的选择。245 收藏 -
Go finalizer 不是确定性的资源释放入口。本文解释对象不可达、循环引用、零大小对象和进程退出等边界,并用显式 Close 加 finalizer 兜底的方式管理资源生命周期。180 收藏 -
runtime.Gosched 只能让出当前处理器,不能替代 channel、锁或条件等待。本文从调度语义、GOMAXPROCS、忙等和阻塞边界出发,给出把无效让出改成可控同步的排查方法。209 收藏 -
Go 设置 GOMAXPROCS 后吞吐没有提升,先区分 CPU 配额、I/O 等待、锁竞争和串行边界,再用固定负载对照测试选择并行度。342 收藏 -
Go atomic.Uint32 的原子加法仍会按无符号范围回绕。本文按累计总量、固定阈值和循环计数比较处理方案,给出先检查剩余额度再CAS提交的原创示例,并说明并发清零与其他写入口的风险。302 收藏 -
在 32 位 ARM、386 或 32 位 MIPS 上使用 64 位原子量时,旧式 sync/atomic 函数要求调用方保证对齐。本文解释结构体字段布局风险,并给出迁移 atomic.Int64、保留旧 API 和构建检查的做法。445 收藏 -
使用 Go 1.25 的 sync.WaitGroup.Go 启动并发任务时,怎样让每个闭包拿到独立参数?本文从局部副本、函数参数、值对象和指针风险说明安全写法。105 收藏