-
Go 用 bufio.Writer.ReadFrom 复制大文件时,Reader 的短读通常不是错误,底层 Writer 的短写则必须通过 ReadFrom 和最后一次 Flush 的错误共同判断。本文按调用路径说明快速路径、缓冲区、io.ErrShortWrite 与 io.ErrNoProgress 的处理方式。
-
Go sync.Pool 里的对象会消失,是因为它只承诺临时对象复用,不承诺持久保存:池中元素可被运行时自动移除,Get 也可能直接把池当作空池。本文用 New、Get、Put 示例说明正确用法,并划清 sync.Pool 与业务缓存的边界。
-
用 go/format.Source 格式化模板生成的 Go 源代码,处理完整文件与代码片段的差异,再在成功后写入文件,并说明固定 gofmt 版本的稳定性边界。
-
slices.Insert 批量插入是否复用底层数组,先看插入后的长度是否超过原切片容量,再结合尾部或中间插入位置判断移动成本。本文给出容量判断、别名边界与可复查验证代码。
-
time.AfterFunc 会在独立 goroutine 中执行回调。本文用事件 channel、stop 信号和 callbackDone 完成信号,说明如何让主 goroutine 安全接收超时事件,并处理 Stop、Reset 与回调并发边界。
-
Go 的 utf8.DecodeRuneInString 遇到非法 UTF-8 时返回 RuneError 和 size=1,空字符串则返回 size=0。本文用原创示例说明如何按字节推进、区分合法替换字符,并处理分块读取的字符边界。
-
sync.Map 虽然支持并发安全,但只针对少数访问模式优化。本文从单键写一次、不同 key 并发、同键频繁覆盖、复合更新和 Range 一致性几个角度,说明什么时候应该换回强类型 map 加 RWMutex。
-
json.RawMessage 本质上是保存原始 JSON 字节的切片,普通赋值只复制切片描述,两个变量仍可能共享底层数组。本文用 Unmarshal 和直接修改两个场景定位别名来源,并给出 bytes.Clone、append 到 nil 切片的深拷贝写法与隔离检查清单。
-
GOMEMLIMIT 是 Go runtime 的软内存限制,不是 cgroup 或操作系统的硬性封顶。本文从统计范围、GC 让步机制、运行指标和并发控制四个方面说明超限原因与配置边界。
-
Go 1.24 引入 runtime.AddCleanup 后,资源包装对象可以把兜底清理与显式 Close 分开。本文用一个文件描述符包装示例说明 AddCleanup、Cleanup.Stop、KeepAlive 的调用边界,以及为什么它不能替代显式关闭。
-
maps.Copy 只负责把源 map 的键值写入目标 map,不会替 nil 目标分配存储。本文解释 nil map 的读写边界、make 初始化方式,以及函数内初始化后如何返回可写 map。
-
Go 的 time.Time 比较不能只看打印出来的日期。Equal 比较时间瞬间,== 还会比较 Location 和 monotonic clock 读数。本文用跨时区、time.Now、序列化和 map 键几个场景说明迁移边界。
-
Go 的 -ldflags -X 只能写入满足条件的包级 string 变量,不能修改 const。本文用最小示例说明正确声明、完整 import path、初始化边界和不生效时的排查方法。
-
go.work 的 use 不是递归目录扫描器。本文用 GOWORK、go list 和嵌套模块示例,说明本地 workspace 如何影响依赖解析,以及 CI 如何避免误用本地模块。
-
讲清 Go errors.Join 在资源清理中的用法:如何合并主错误与 Close 错误、批量保留多个清理错误,并用 errors.Is 与 errors.As 做判断。