Go教程技术文章
-
io.ReadAtLeast 读取的是至少 min 个字节,不等于一定只读取 min 个字节。本文说明如何控制缓冲区、解析可变长度消息的固定前缀,并处理 EOF、ErrUnexpectedEOF 和 ErrShortBuffer。194 收藏 -
io.Writer 只保证 Write([]byte),不能直接假设目标一定有 WriteString。本文用 io.StringWriter 和 io.WriteString 说明能力判断、兼容回退,以及包装器带来的边界。252 收藏 -
Go 的 io.CopyN 可以把流中的固定字节数复制到缓冲区,适合读取并保留协议头原始字节。本文说明 written 与 err 的成功判定、输入过短和底层错误处理,并比较它与 io.ReadFull 的边界。276 收藏 -
Go 1.23+ 可以用 maps.All 把 map 暴露为 iter.Seq2。本文从最小封装开始,说明如何组合过滤、提前停止和按需收集,并提醒 map 遍历顺序不可依赖。242 收藏 -
Go 1.23 的 iter.Seq 可以直接用于 range 函数。本文从 yield 的返回值出发,说明 break 怎样提前停止消费、迭代器怎样响应 false,以及自然结束、单次迭代和错误边界。106 收藏 -
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 收藏