Go问答技术文章
-
Go expvar.Map 可以把按接口、缓存或队列维度拆分的统计值组织成一个指标映射,再用 Publish 注册到 expvar 全局变量表。本文说明 Add、Set、Get、Delete 与 Publish 的职责边界,以及并发更新和键名设计要点。385 收藏 -
Go race 报告标出 Read by goroutine 时,不要只盯着读函数。本文用一段最小复现说明如何沿 Previous write 栈找到真正写入点,再把互斥锁、通道或原子操作补在共享状态边界。385 收藏 -
Go json/v2 迁移不能只替换 import。本文区分工具链升级与语义切换,梳理字段匹配、空值、omitempty 和严格输入风险,给出兼容选项示例及发布回退清单。384 收藏 -
Go encoding/json 的 omitempty 不会自动按自定义 IsZero 省略结构体字段。应使用 omitzero,并区分未提供、显式零和有效值;组合标签按空或零任一条件省略。384 收藏 -
Go 1.23 及以上使用 slices.Collect 收集空 iter.Seq 时会得到 nil 切片。本文区分 nil 与非 nil 空切片、interface 包装和 JSON 输出,并给出稳定返回 [] 的处理方式。384 收藏 -
说明Go bitset中Length概念对应Len方法,比较逻辑位长度与Count置位数量,通过小集合状态推导解释扩展、清位、空集合及性能指标的差别。384 收藏 -
Go 的 math/big.Int 表示整数,调用 Quo 时会按整数除法截断,因此 5 除以 2 得到 2。需要保留小数时,应把输入放进 big.Rat,再用 Quo、RatString 或 FloatString 输出。本文同时说明 QuoRem、IsInt、除数为零和负数边界。384 收藏 -
testing.T.Setenv 不是通用资源释放器,它通过 Cleanup 在测试结束后恢复环境变量。本文按生命周期、并行限制和直接 os.Setenv 三条线排查“没有释放”的错觉,并给出文件、连接和 goroutine 的独立清理写法。384 收藏 -
用最小配方修复 iter.Seq2[T,error] 的错误返回链,覆盖数据源、转换适配器、消费端与 Pull2 的常见吞错位置。383 收藏 -
Go 的 sync.RWMutex 在等待写者时会暂时挡住后续 RLock。本文从锁等待、临界区长度、递归读锁和快照设计入手,给出读请求堆积的排查与处理方案。383 收藏 -
Go 1.27 的 encoding/json/v2 默认拒绝 JSON 对象中的重复成员名。本文解释拒绝原因、严格解码写法,以及兼容历史数据时如何显式开启 AllowDuplicateNames。383 收藏 -
Go errors.Is 默认按错误值和包装链判断匹配;当业务错误需要对外表现为某个哨兵错误时,可以实现 Is(error) bool 做稳定的浅层匹配。本文说明实现方式、包装链行为和常见边界。383 收藏 -
Go cgo 报 pkg-config 找不到系统库时,先区分工具、.pc 元数据、头文件和链接器问题,再用 PKG_CONFIG_PATH、模块名与构建环境逐层排查。383 收藏 -
GoLLRB 的遍历方法不是简单地把升序改成降序:AscendGreaterOrEqual 包含 pivot,AscendLessThan 排除 pivot,AscendRange 使用大于等于下界且小于上界的闭开区间,DescendLessOrEqual 则按降序包含 pivot。本文用一组可复用的判断表说明边界和回调停止语义。383 收藏 -
Golang · Go问答 | 1天前 | go · 垃圾回收 · 资源管理 · 运行时 · 排错 · Go 垃圾回收 资源清理 runtime.AddCleanup runtime.KeepAlive runtime.Cleanup.Stop
Go Cleanup.Stop 对已经因对象不可达而排队的清理函数不会生效。本文从取消窗口、对象可达性、KeepAlive 位置和闭包反向引用四个方面说明原因,并给出显式释放与兜底清理的配合写法。383 收藏