Go语言技术文章
-
Go os.Chtimes 接收的是路径,但遇到符号链接时会沿路径找到目标文件并修改访问时间和修改时间。本文用 Stat、Lstat 和零值时间参数拆开观察层级,说明为什么链接自身的 ModTime 不会随调用变化。215 收藏 -
Go 的 slices.BinarySearchFunc 在未命中时仍会返回有序边界。本文用自定义比较器说明 n、found 的含义,以及如何把未命中的元素插入正确位置,避免排序规则不一致造成错误下标。177 收藏 -
Go 的 sync/atomic.Value 会记住首次写入的具体类型。本文用快照封装说明如何让 Store、Load 和更新始终保持类型一致,并避开 nil、指针与共享数据修改的常见坑。424 收藏 -
Go atomic.Pointer 发布配置快照时,要先独立构建、再原子替换,并保持内部 map 不可变。本文用路由配置说明输入复制、单次 Load、失败保留旧配置与多发布者限制。120 收藏 -
Go 的 sync/atomic.Bool 适合维护一个被多个 goroutine 访问的开关状态。本文从普通 bool 的竞争现象出发,说明 Load、Store、Swap、CompareAndSwap 的使用边界,以及复制和复合状态不能混用的问题。236 收藏 -
解释 Go sync.Pool 中对象在 GC 后为什么不能视为必然存在,给出 New 兜底、重置状态和 Get/Put 生命周期的安全写法,并划清临时复用与业务缓存的边界。331 收藏 -
讲清 Go sync.Pool 复用可变对象时的 Get、Reset、使用与 Put 顺序,区分清空对象和清空池,说明容量、敏感字段、所有权与适用边界。473 收藏 -
Go hash/crc64 同时提供 ISO 与 ECMA 两种预定义多项式。本文说明怎样按既有协议选择 crc64.MakeTable,如何在 Checksum、New 和 Update 之间切换,并处理分块顺序、结果字节序与非密码学边界。370 收藏 -
Golang · Go教程 | 1星期前 | 并发 · errgroup · goroutine · 错误处理 · go · Go 并发控制 SetLimit x/sync/errgroup TryGo
Go x/sync/errgroup.TryGo 会在并发额度未满时启动任务,额度已满时立即返回 false。本文用 SetLimit、TryGo 和 Wait 说明非阻塞提交、拒绝分支、错误回收与 Context 取消的边界。176 收藏 -
Go sync.OnceValue 的初始化函数只执行一次,但如果函数 panic,返回函数后续每次调用仍会以同一个值 panic。本文用最小示例解释这一语义,并给出 recover 与重试边界。362 收藏 -
用 Go iter.Pull2 消费分页 Seq2 时,空页应让生成器自然结束,消费者提前退出则必须调用 stop。本文给出 next、stop 和 defer 的组合写法,并说明空页死循环与并发调用边界。448 收藏 -
Go 1.21 引入 maps 包后,配置映射可以用 maps.Equal 比较键值对;本文说明基本用法、nil 与空 map 边界,以及值为切片时如何改用 maps.EqualFunc。233 收藏 -
Go maps.Collect 可把键值迭代器收集成新 map。以商品库存索引说明业务键清洗、重复覆盖、查询顺序与切片引用共享,并给出需要返回错误时的显式循环方案。196 收藏 -
Go 的 maps.Clone 不只是复制键值,它还保留源 map 的 nil 语义。本文用最小示例区分 nil map 与非 nil 空 map,说明 Clone 后的写入边界、浅拷贝限制,以及序列化和默认值处理时的工程取舍。331 收藏 -
Go encoding/hex.Dumper 可以把写入的字节流转换成 hexdump -C 风格的十六进制转储。本文从日志排查场景出发,说明如何接入 io.Writer、为什么必须处理 Close,以及如何区分写入失败和转储收尾边界。455 收藏