Go语言技术文章
-
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 收藏 -
Go 的 sync.RWMutex 在等待写者时会暂时挡住后续 RLock。本文从锁等待、临界区长度、递归读锁和快照设计入手,给出读请求堆积的排查与处理方案。383 收藏 -
Go Mutex TryLock 返回 false 只表示当前没有拿到锁,不应继续读取受保护状态。本文比较阻塞等待、旧快照、快速拒绝和异步转交四种路径,并给出可直接改造的不可变快照示例。431 收藏 -
Go context.Value 取值失败,应区分 key 未命中与值类型断言失败,再比较 key 的动态类型和动态值。本文用原创示例解释定义类型、别名与跨包约定,并提供私有 key 的类型化访问封装。368 收藏 -
Go 上下文取消后下游请求仍不退出,通常不是 cancel 失效,而是取消信号没有传到具体 API,或底层阻塞点本身不支持取消。本文按 HTTP、数据库和自定义调用链给出排查与修复方法。313 收藏 -
Go encoding/csv 遇到列数不一致时,关键是先理解 FieldsPerRecord 的默认约束,再用 ErrFieldCount 与 ParseError 区分字段数问题和 CSV 语法问题。本文给出固定列、变长记录和兼容脏数据三种处理方式。499 收藏