Go语言技术文章
-
atomic.Uint64 适合维护并发计数,但一个已经使用过的值不能再通过复制传递。本文用请求计数器拆开 Add、Load、Store 和复制副本的边界,说明为什么会触发 go vet 警告,以及如何安全地初始化、读取和测试。379 收藏 -
文件测试最容易留下脏现场:固定目录会互相覆盖,手写清理又常常漏掉失败分支。本文用 testing.TB.TempDir 完成隔离实验,核对目录生命周期、并发测试和清理顺序。379 收藏 -
Go 服务做配置热更新时,真正要解决的不是重新读取文件,而是让新旧版本切换可验证、失败可回滚。本文用原子替换、版本号校验和恢复指针搭出一条可落地的更新流水线。378 收藏 -
从 HTTP 请求、后台 goroutine 和数据库查询三个场景说明 context.WithCancel 返回的 cancel 为什么必须调用,给出 defer、父子上下文和取消后收尾的可验证写法。378 收藏 -
目录扫描从 os.ReadDir 改成 os.File.ReadDir(n) 后,读取阶段可以按批次控制内存,但全局排序需求不会自动消失。本文用一个目录索引任务拆开读取、排序、错误收口和验收门禁,给出可复用的 Go 实现与取舍方法。378 收藏 -
net/netip.Prefix.Overlaps 用来判断两个 CIDR 前缀是否包含共同 IP,但地址族、零值前缀、IPv4 映射 IPv6 和 /0 边界都会影响结果。本文用一段可运行的 Go 代码拆开这些判断。377 收藏 -
用 testing.TB.Cleanup 管理临时目录、环境变量、HTTP 服务和数据库夹具,说明注册时机、后进先出顺序、子测试边界与失败排查方法。375 收藏 -
Go 1.23 引入的 os.CopyFS 可以把 embed.FS 等 fs.FS 内容复制到磁盘,但不会覆盖已有文件。本文用一个配置目录示例讲清创建权限、覆盖错误、符号链接和可重复部署的核对方法。374 收藏 -
用一个可运行的小例子说明 Go embed.FS 读取嵌套资源时的路径规则、fs.ValidPath 校验边界与错误处理方式,避免把磁盘路径习惯带进嵌入文件系统。374 收藏 -
Go 服务收到 SIGINT 或 SIGTERM 后,不能只依赖进程直接退出。本文拆解 os/signal.NotifyContext 如何把信号转成 context.Done,说明 stop 的资源释放、取消传播和优雅退出的验收边界。374 收藏 -
用 net/http/httptrace 把一次 Go HTTP 请求拆成 DNS、连接、TLS、写请求和首字节等阶段,判断慢点究竟发生在哪里。372 收藏 -
bytes.Buffer.Bytes 返回的是缓冲区底层数据切片,不是独立副本。本文用复用、Reset 和 copy 三个边界说明什么时候可以读取,什么时候必须先复制。371 收藏 -
Go 1.24 引入的 os.Root 将文件操作约束在指定目录内。本文用 OpenRoot、Root.Open 和相对路径示例说明它如何处理 ..、绝对路径与符号链接,并给出可复现的错误边界检查。371 收藏 -
io.NewOffsetWriter 可以把顺序写入映射到一个带起始偏移的区域,但它不会替底层 WriterAt 修复短写,也不会把 Seek 的定位语义变成并发安全。本文用可复现的内存示例拆开偏移、短写和错误传播边界。369 收藏 -
Go 1.25 继续完善 runtime.AddCleanup 的并发清理能力。本文从文件描述符这类外部资源出发,说明它与 SetFinalizer 的语义差异、必须保留的显式 Close,以及 GODEBUG 检查方式。368 收藏