Go教程技术文章
-
用 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 收藏 -
Go 1.25 继续完善 runtime.AddCleanup 的并发清理能力。本文从文件描述符这类外部资源出发,说明它与 SetFinalizer 的语义差异、必须保留的显式 Close,以及 GODEBUG 检查方式。368 收藏 -
bytes.Buffer.Bytes 返回的是仍由缓冲区管理的切片视图,不是独立副本。本文通过复用、写入和复制三个场景,说明如何判断别名风险,以及什么时候该用 bytes.Clone 或 append(nil, b.Bytes()...) 保留稳定数据。368 收藏 -
用 log/slog 的 Enabled 判断和 LogAttrs 组织一次可验证的小实验,说明低级别日志何时被丢弃、昂贵属性何时仍会提前计算,以及 HandlerOptions.Level 与 LevelVar 的边界。368 收藏 -
Go 1.26 允许 new(expr) 直接从表达式推断指针类型。本文用切片和映射对比旧写法,说明零值、可写性、类型推断和迁移检查边界。366 收藏 -
从配置文件落盘权限不符合预期的现场出发,拆解 Go os.WriteFile 的 perm、Unix umask、首次创建与覆盖已有文件的差异,并给出可复现的检查和修正边界。364 收藏 -
从一个可重复触发的 Go 定时任务出发,拆解 time.Ticker 的停止顺序、退出信号、重复 Stop 边界和可验收的收尾写法。364 收藏 -
调用 time.Ticker.Stop 后,程序仍可能处理一次已经进入通道的时间值。关键不在于 Stop 会不会清空通道,而在于退出信号、通道消费和任务收尾的顺序。本文用可运行示例拆开这个边界。363 收藏 -
Golang · Go教程 | 2天前 | 标准库 · 性能优化 · 字符串处理 · Go教程 · 内存分配 strings.Split Go 1.24 Go 迭代器 Go strings.SplitSeq
Go 1.24 的 strings.SplitSeq 返回迭代器,适合边读边处理分隔文本。本文对照 Split 的切片语义,验证空分隔符、连续分隔符和提前停止,并说明什么时候不该为了省一个切片改写代码。363 收藏