Go问答技术文章
-
Go 1.23 的 slices.Chunk 会把每个分组容量裁到长度。本文从三索引切片、底层数组共享和 append 扩容讲清设计原因,并给出修改、追加、异步留存与 Clone 的工程决策边界。363 收藏 -
maps.DeleteFunc 可以在遍历同一个 map 时按条件原地删除。本文说明删除未到达条目的规范语义,并给出纯谓词、稳定顺序、回调副作用和并发访问的处理边界。236 收藏 -
maps.Clone 只对 map 的键和值执行普通赋值,因此新旧 map 的顶层容器独立,但切片、指针、内层 map 等引用型值仍共享底层数据。本文通过示例说明边界,并给出切片、嵌套 map 与指针结构的深拷贝写法。118 收藏 -
maps.Equal 使用 == 比较 map 值,而 IEEE 754 NaN 与包括自身在内的任何 NaN 都不相等,因此两个相同键下都保存 NaN 的 map 也会比较失败。本文给出 EqualFunc 修复值比较的方法,并说明 NaN 键为何必须规避。295 收藏 -
Go 的 iter.Seq 没有 error 返回位,遍历过程中的错误应通过结果对象携带;初始化失败则直接作为外层 error 返回,pull 迭代器提前结束还要调用 stop。171 收藏 -
解释 Go 单次 iter.Seq 被重复 range 时的真实行为,对比完整消费与提前停止,并给出快照、工厂函数和 API 注释等安全设计方式。270 收藏 -
Go 的 iter.Seq 是由 yield 返回值驱动停止的。本文解释 range 提前 break、iter.Pull 的 stop,以及自建异步生产者为何会继续运行,并给出可复查的资源回收方案。269 收藏 -
unique.Make 设计上不会永久保留所有失去 Handle 的规范值,但活跃 Handle 会延长生命周期,高基数长期服务还要关注弱引用清理时机与 Go 官方已知问题。本文给出适用边界、代码和监控建议。257 收藏 -
unique.Handle 的相等性遵循创建它的 T 值的 Go == 语义;只有当 T 本身是指针时,Handle 相等才可解释为指针值相等,不能泛化为任意原始对象地址相同。390 收藏 -
说明 Go unique.Handle 的 comparable 边界,并给出含切片结构体按内容生成可比较键的安全做法与常见误区。388 收藏 -
weak.Pointer 不会让对象保持可达,但 map 中的弱键不会自动删除。本文用 Go 示例说明如何依据 Value() 返回 nil 清理失效键,并处理并发、保活和惰性扫描边界。448 收藏 -
Go 变量仍在作用域不等于对象仍然可达:函数参数或接收者可在最后一次提及后失去活性,weak.Pointer.Value 随后可能返回 nil。本文还原根因,并给出强所有者与 runtime.KeepAlive 的正确放置方式。195 收藏 -
解释 weak.Pointer.Value 返回 nil 的正常回收语义,区分共享引用容器与目标字段的数据竞争,并给出锁、KeepAlive 和 race detector 的排查写法。153 收藏 -
并行基准测试不能把 RunParallel 回调里的 PB.Next 直接替换成 B.Loop。本文区分普通基准循环与并行工作分配,给出 B.Loop 迁移范围、RunParallel 正确写法、计时器边界和 Go 版本兼容检查。142 收藏 -
解释 Go testing.B.Loop 如何接管基准测试的迭代扩容、计时边界和防编译器消除职责,并说明 b.N 仍可在循环结束后用于自定义指标。497 收藏