Go语言技术文章
-
Go 1.25 为 testing.TB 增加 Output 方法。本文用一个并行子测试场景说明它与 Log 的关系、缓冲何时刷新,以及测试函数返回后为什么不能继续写入。414 收藏 -
Golang · Go教程 | 1星期前 | 日志 · 标准库 · 性能 · Go教程 · log/slog · Go 日志级别 log/slog Logger.Enabled Handler.Enabled Attr
Go log/slog 的 Logger.Enabled 会在日志参数处理前询问 Handler 是否接收当前级别。本文用可运行示例说明昂贵参数计算、slog.Attr 构造和 LogAttrs 的边界,避免关闭日志时仍付出无效成本。231 收藏 -
time.Time.AppendText 从 Go 1.24 起提供面向 encoding.TextAppender 的 RFC 3339 文本输出。它适合把时间追加到已有字节缓冲区,但要处理错误返回,并注意它保存的是时区偏移而不是 Location 名称。489 收藏 -
Golang · Go问答 | 1星期前 | 标准库 · 错误处理 · IO · 文件读取 · Go问答 · Go LimitReader eof Reader io.LimitedReader 读取上限
io.LimitedReader 读完 N 个字节后会先把 N 变成 0,并在下一次读取时返回 EOF;这和底层 Reader 是否已经到达结尾不是一回事。本文用可运行示例拆开上限耗尽、真实 EOF 和底层错误的判断边界。316 收藏 -
Go 1.24 引入的 os.Root 可以把文件操作限制在指定目录树内。本文用文件创建场景说明 Root.OpenFile 的相对路径、创建标志、符号链接和错误检查边界。323 收藏 -
复用 Go 的 time.Timer 时,Reset 的安全关键不是重新设置时长,而是先确认旧定时器是否停止、是否仍有到期信号,以及是否存在多个 goroutine 同时消费 C。本文用单次超时循环拆解 Stop、Reset、timer.C 和并发读取的边界。199 收藏 -
Go 的 log/slog 会解析 LogValuer 返回的 Value。本文用一个最小示例说明返回自身为什么不会无限递归、Resolve 的保护边界在哪里,以及如何为敏感字段设计稳定的日志值。196 收藏 -
Go 的 slices.SortStableFunc 会在比较结果相等时保留原顺序,适合按单一字段排序又要维护同组先后关系的场景。本文用订单优先级示例拆解比较函数、稳定性和空切片边界。476 收藏 -
os.ReadDir 和 File.ReadDir 都能遍历目录,但排序规则并不相同。本文用最小示例说明文件名排序、directory order、n 参数和分页读取的边界,避免把稳定输出误当成底层目录顺序。486 收藏 -
用 Go netip.Prefix.Contains 实现路由白名单时,IPv4、IPv4-mapped IPv6 与前缀长度必须先统一判断,本文给出可运行的核验方法。141 收藏 -
Go 的 net/http Cookie 同时设置 Expires 与 MaxAge 时,浏览器如何判断会话、持久化和删除?本文用 SetCookie 与 Request.Cookie 的最小例子拆开三个边界。181 收藏 -
CloseIdleConnections 只处理 Transport 中已完成请求、当前处于 keep-alive 空闲状态的连接,不会中断正在使用的连接。本文用可复现代码拆开它与 MaxIdleConnsPerHost、IdleConnTimeout 的边界。428 收藏 -
目录扫描不一定要为每个文件再做一次 Stat。本文从 os.ReadDir 返回的 DirEntry 出发,区分 Type 与 Info 的职责,并给出按目录项类型筛选、必要时再调用 entry.Info 的可复现写法。414 收藏 -
用 archive/tar.Reader 顺序读取 tar 包时,目录项不应被当成文件内容处理。本文从 Reader.Next 的自动丢弃规则出发,给出跳过目录、限制目标路径、区分 io.EOF 与 ErrInsecurePath 的可验证写法。293 收藏 -
Go 1.24 的 os.OpenInRoot 如何安全打开不可信文件名?本文用目录逃逸、符号链接和错误分支说明 Root 的边界,并给出可核对的最小代码。381 收藏