Go语言技术文章
-
Golang · Go问答 | 5天前 | 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 收藏 -
Go 精简容器中 time.LoadLocation 失败,通常是镜像缺少 IANA 时区数据库。本文按查找顺序说明安装 tzdata 与导入 time/tzdata 两种修复方案,并给出容器上线复查清单。401 收藏 -
Go 的 time.Parse 不使用 YYYY-MM-DD 这类占位符,而是用固定参考时间描述布局。本文从解析失败的现场出发,拆解 2006、01、02、15、04、05、MST 和 -07:00 的含义,并说明无时区输入时 Parse 与 ParseInLocation 的区别。487 收藏 -
Go 正则遇到非法 UTF-8 字节时不会自动报错,而是按 utf8.RuneError 解释输入。本文从匹配现象、编码策略和字节索引三个边界说明如何定位问题,并给出严格拒绝与规范化的 Go 写法。199 收藏