Go语言技术文章
-
Go bytes.Buffer Grow 会预留后续写入所需的容量,但不会直接增加 Len。本文用已知长度和未知长度两种场景说明如何减少重复扩容,并梳理负数、过大参数、Reset 复用与并发访问边界。246 收藏 -
Go 接口中的 nil 指针不一定等于 nil 接口。本文用最小代码对比 typed nil 的成因,并给出 error 返回、调用方检查、errors.Is 与 errors.As 的安全处理清单。316 收藏 -
Go 接口里放入 typed nil 指针后,接口本身可能不等于 nil;comma-ok 断言成功也不代表结果指针可用。本文用 T/V 两层模型和边界封装说明如何排查与处理。416 收藏 -
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 收藏