Go语言技术文章
-
Go net.Pipe 没有内部缓冲,读写可能一直等待对端动作。本文说明怎样设置 deadline,并用 errors.Is、net.Error 和关闭错误区分超时、对端关闭与其它网络错误。294 收藏 -
Go 错误被 fmt.Errorf 包装后,直接类型断言可能失效。本文用自定义错误演示 errors.As 如何沿错误树取出目标类型,并区分 As、Is 与 errors.Join 的适用边界。261 收藏 -
Go 错误经过多层 %w 包装后,不能再依赖 == 或完整错误文本判断原因。本文用 errors.Is 处理多层 Unwrap,区分 errors.Unwrap 的单层职责,并说明错误分类与上下文包装的边界。204 收藏 -
Go net/url 解析 https://example.com/items? 时,RawQuery 为空并不代表原始 URL 没有问号。本文用 URL.ForceQuery 区分没有查询、空查询和带参数查询,给出解析、修改和输出请求 URI 的最小配方。231 收藏 -
Go HTTP 服务端用 MaxBytesReader 限制请求体后,应该通过 errors.As 区分正常读取、超过上限和其它读取错误。本文给出带 Close 的 handler 写法,并说明大小限制与业务校验的边界。318 收藏 -
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教程 | 2天前 | 并发 · 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 收藏