Go语言技术文章
-
Go 的 iter.Pull2 把 Seq2 转成 next/stop 拉取接口。本文用一个可复用示例说明提前 break 时为什么必须调用 stop,以及 defer stop()、ok 判断和并发边界怎么处理。165 收藏 -
Go 的 nil map 读取会返回元素零值,但写入会触发 panic。本文用可复现的判断方式拆开读取、ok 值、len、make 和嵌套 map 的边界,给出稳定修复方案。318 收藏 -
用 iter.Seq2[int, error] 同时传出行号和校验错误,说明 range、yield、continue 与 break 的边界,以及 Go 1.23 语言版本要求。140 收藏 -
Go 的三索引切片 a[low:high:max] 会把结果容量固定为 max-low。把 data[:len(data):len(data)] 传给下游后,append 无法复用调用方的额外容量,但已有元素仍可被修改。245 收藏 -
cmp.Or 会把类型零值视为‘没有候选’,适合简单回退,却无法仅凭值区分未提供和显式传入的 0、false 或空字符串。本文用配置示例说明原因,并给出指针存在性方案。182 收藏 -
Go copy 支持源切片与目的切片重叠。本文用区间和示例说明复制方向、返回值、插入删除写法,以及长度、容量和并发边界。210 收藏 -
用 Go maps.EqualFunc 比较带 float64 字段的 map,拆清键集合、结构体值、绝对与相对误差、NaN 和无穷大的处理边界。344 收藏 -
Go 子切片 append 后原切片内容被改写,通常是因为子切片仍有足够 cap,append 复用了同一个底层数组。本文用 len、cap、三索引切片和复制方案说明如何判断与隔离。438 收藏 -
Go maps.DeleteFunc 用回调返回值决定删除或保留,直接修改原 map。本文用状态清理示例说明条件写法、结果核对、nil map 与 clear 的边界。491 收藏 -
Go range 中把循环变量地址放入指针切片,旧语言语义下可能出现地址相同和值被覆盖。本文拆开副本、作用域和 Go 版本差异,并给出指向原元素与独立副本的两种稳定写法。476 收藏 -
Go slices.BinarySearchFunc 遇到重复比较键时返回等价区间最左索引;本文说明 found、插入点、比较器和继续扫描全部重复项的边界。214 收藏 -
Go range 遍历结构体切片时,循环变量拿到的是元素副本。本文说明为什么字段修改不会回写,并给出索引回写、指针切片和 map 结构体的正确处理方式。208 收藏 -
讲清 Go slices.SortStableFunc 按团队、优先级等多个字段排序时的稳定比较器写法,说明比较结果、降序参数、等价元素和常见溢出误区。250 收藏 -
解释 Go 中 nil 指针调用值接收者方法为何会在方法体前 panic,并用最小示例区分值接收者、指针接收者和接口 typed-nil。125 收藏 -
用 Go 的 slices.CompactFunc 按结构体字段处理相邻重复数据,说明比较函数如何定义、为什么只保留连续数据中的第一条,以及就地修改和返回值的使用边界。245 收藏