Go教程技术文章
-
Go 遍历目录时,可以在 filepath.WalkDir 回调中判断 DirEntry,再用 filepath.SkipDir 跳过指定子树。本文比较本地路径与抽象 FS 的写法,说明目录匹配、错误处理、SkipAll 和符号链接等边界。495 收藏 -
Go 1.23 起函数可以通过 iter.Seq 形态被 range 消费。本文说明 yield 签名、false 停止协议、资源清理和重复遍历边界。431 收藏 -
用 iter.Pull 把 Go 的 iter.Seq 转成 next/stop 拉取式接口,说明按需读取、正常结束、提前停止、Pull2 和并发调用的边界。217 收藏 -
Go 的 iter.Seq 用 yield 回调交付序列元素,以布尔返回值约定是否继续。本文通过只取前三个编号的示例,说明按需生成、提前停止、资源清理与重复遍历的职责,并区分惰性、缓存和并发。393 收藏 -
使用 slices.IndexFunc 按谓词查找切片的首个匹配元素,重点说明索引返回值、未命中时的 -1,以及空切片的安全处理。142 收藏 -
Go 1.23 起可以用 slices.Chunk 把切片按固定大小分成连续子切片并直接遍历。本文说明最小写法、尾块、空输入、非法 n、底层数组关系,以及旧版本 Go 的兼容实现。498 收藏 -
Go 使用 slices.Compact 原地合并相邻重复元素时,应接住返回切片并停止使用旧长度视图。本文说明相邻去重、共享底层数组与容量的区别,梳理 Go 1.22 尾部清零变化及保留输入的写法。342 收藏 -
用 maps.EqualFunc 比较两个 map 时,键仍按 == 判断,值则交给自定义函数处理。本文从跨类型值、大小写规则、缺键与 nil map 讲清 API 边界,并给出生产代码选型清单。118 收藏 -
Go 用 atomic.Bool 表示一次性状态时,核心是让所有调用共享同一个对象,并用 CompareAndSwap(false, true) 竞争唯一成功者。本文区分 Load、Store、Swap 和 CompareAndSwap 的边界,说明重复调用、重置、复制和多字段一致性问题。448 收藏 -
用 Go 标准库 maps.Clone 复制 map,区分 map 容器独立与切片等 value 仍共享底层数据的边界,并给出可验证的复制方案。410 收藏 -
用 sync/atomic.Pointer 原子发布完整的 Go 配置快照,说明 Store、Load、Swap 与 CompareAndSwap 的区别,以及为什么发布后不能原地修改配置对象。446 收藏 -
围绕 sync.Pool 的临时对象语义,说明 New、Get、Put、Reset 和对象所有权边界,解释为什么 Pool 不能保存业务状态、不能依赖命中率与取出顺序,并给出缓冲区复用与方案选型示例。162 收藏 -
Go 的 sync.Cond 不负责保存通知,真正需要等待的是受锁保护的共享谓词。本文从丢失唤醒的症状出发,说明为什么必须用同一把锁配合 for 循环检查条件,并给出 Signal 与 Broadcast 的选择方法。143 收藏 -
Go x509 的 SetFallbackRoots 用于系统根证书池不可用时的兜底配置。本文说明 CertPool 构造、显式 Roots 优先级、nil 与重复调用边界,以及 GODEBUG 排查方式。397 收藏 -
使用 Go sync.OnceValue 缓存一次计算值,排查重复创建 getter、初始化阻塞与可变返回值共享问题,并说明 panic、零值和缓存生命周期的注意点。103 收藏