Go教程技术文章
-
maps.Equal 适合比较值可比较的 map;遇到切片或嵌套 map,要用 EqualFunc 把值比较规则交给 slices.Equal 或递归的 maps.Equal。本文整理类型约束、nil 边界和 NaN 键等容易误判的情况。383 收藏 -
Go map 判断指定键是否存在,要使用 comma-ok 双值写法;本文用最小示例说明零值、缺键、nil map 与并发访问的边界。456 收藏 -
Go iter.Seq2 的两个 yield 参数需要明确业务含义,回调 bool 则表示是否继续。通过原切片索引与任务值的完整示例,解释过滤编号、提前停止、Go 1.23 要求、回调兼容写法及闭包所有权边界。474 收藏 -
Go 1.21 起可以用 maps.Copy 将默认配置与覆盖配置合并到目标 map:src 的同名键覆盖 dst,目标映射会被原地修改。本文说明调用方向、nil 目标、浅拷贝和旧版本兼容写法。453 收藏 -
Go 使用 slices.Delete 原地删除切片区间,并在 Go 1.22 及以后清空废弃尾部的元素引用。本文说明半开区间、返回长度、别名共享、批量删除和需要保留输入时的复制边界。262 收藏 -
Go slices.SortStableFunc 用三态比较函数排序结构体切片,并保留比较器判定相等元素的输入顺序。通过任务优先级示例说明降序比较、多字段规则、Clone 保护原排列、严格弱序与浅复制边界。348 收藏 -
Go 的 slices.BinarySearch 返回匹配索引或有序插入位置。本文用最小示例说明升序约束、found 判断、重复值边界和 BinarySearchFunc 的结构体查找写法。251 收藏 -
Go 的 atomic.Int64 可以用零值记录可正可负的并发偏移量。本文从 Add、Load、Store、Swap 和 CompareAndSwap 的调用方语义出发,说明如何做增减、重置、条件更新,以及首次使用后不可复制和只保护单个整数等边界。336 收藏 -
atomic.Pointer 可以发布完整的不可变配置快照,但不会保护指针指向的 map 或字段。本文用独立副本、Store 和单次 Load 的完整示例,解释初始化、同版读取、多写者更新丢失及性能比较的边界。307 收藏 -
Go sync.OnceValue 会缓存成功结果,也会记住初始化函数的 panic。本文用调用结构、状态边界和决策表说明怎样设计可预测的一次性初始化。260 收藏 -
用 sync.Mutex 把共享状态的读取、条件判断和写回绑定在同一个临界区,避免并发复合更新中的竞争窗口、丢失更新和状态泄漏。145 收藏 -
用 Go sync.OnceFunc 把文件或连接的清理动作封装成共享闭包,让 defer、超时和错误分支可以重复调用但只真正执行一次,并说明与 sync.Once 和可重试清理的边界。116 收藏 -
围绕 Go context.WithCancel 的生命周期,说明为什么创建后应立即 defer cancel,以及长任务如何让 worker 监听 Done 并正确收尾。374 收藏 -
Go WithoutCancel 可以保留父 Context 的关联值,同时移除父级截止时间和取消传播。通过完整示例说明独立 WithTimeout、cancel 的释放责任,以及 Done 为 nil、值不是快照和后台任务可靠性的限制。173 收藏 -
Go context.WithCancelCause 可以把业务取消原因传给下游。本文区分 ctx.Err() 与 context.Cause(ctx),示范哨兵错误、自定义错误类型、errors.Is 判断以及父子 Context 的首个取消原因规则。449 收藏