Go问答技术文章
-
Go 1.24 的 strings.SplitSeq 返回一次性迭代器,适合只需逐项处理而不必保留整个字符串切片的场景。本文用大文本解析示例说明它与 strings.Split 的语义差异、空字段边界、内存取舍和兼容写法。363 收藏 -
解释 Go runtime.SetFinalizer 为什么不是可靠的资源释放器,结合对象可达性、GC 时机、终结器链和 Close 设计给出可验证的使用边界。362 收藏 -
Go 的 net/netip 用 Prefix 表示网段,ParsePrefix 负责解析输入,Masked 负责得到规范化网络地址,Contains 才负责判断地址归属。本文用 IPv4、IPv6 和非规范输入拆开 Bits、Masked 与 Contains 的边界。360 收藏 -
用 Go 的 net/http ServeContent 提供可断点读取的文件响应,重点看 Range、Content-Range、io.ReadSeeker 和条件请求之间的边界,避免手写文件分片时遗漏偏移与缓存处理。360 收藏 -
slog.LogValuer 适合把昂贵或需要脱敏的日志值延迟到 Handler 真正处理时再计算,但它不是所有日志字段的默认包装。本文用 LogAttrs、Handler.Enabled 和 LogValue 的真实调用链说明何时值得使用,以及递归解析和敏感字段的边界。359 收藏 -
Golang · Go问答 | 1天前 | 日志 · 标准库 · Go问答 · 兼容改造 · log/slog · Go 结构化日志 log.Logger slog.NewLogLogger SetLogLoggerLevel
旧代码仍依赖 log.Logger 时,可以用 slog.NewLogLogger 把输出桥接到 slog.Handler。关键是先选清楚桥接级别,再分别验证旧日志入口、结构化字段和 SetDefault 后的行为。356 收藏 -
从一个批量拼接日志的场景出发,验证 bytes.Buffer.Grow 预留容量何时有用、WriteString 如何触发扩容,以及 Reset 为什么只清空长度而不承诺释放底层空间。352 收藏 -
用 Go archive/tar.Reader.Next 遍历归档时,处理未读数据、io.EOF 与非本地路径,避免跳过文件或把危险路径直接写入磁盘。352 收藏 -
slog.Handler.WithAttrs 适合把请求或模块共享的属性提前交给 Handler 复用,但它不是可变日志上下文。本文从属性继承、WithGroup 分组和多 goroutine 使用三个边界说明如何减少重复处理并验证输出。351 收藏 -
Go 的 time.Duration 本质是 int64 纳秒数。本文用具体换算、溢出判断和定时器示例说明,为什么长时间配置会变成负数,以及如何在进入 time.NewTimer 或 time.After 前拦住错误值。348 收藏 -
context.WithoutCancel 会保留父 Context 的值,但切断取消、截止时间和 Err 传播。本文用请求收尾场景说明它的适用边界、调用链写法和超时风险,避免把它当成无限期后台执行开关。345 收藏 -
用 Go crypto/x509 验证证书链时,Roots 决定信任锚,Intermediates 只负责补链,VerifyHostname 还要单独核对主机名。本文用最小代码说明三者的边界与排错顺序。345 收藏 -
用 Go 的 io.SectionReader 读取文件片段时,EOF 到底代表成功还是数据不足?本文从偏移量、剩余长度和 ReadAt 行为入手,给出一段可复查的判断代码。342 收藏 -
Go 1.22 起 ServeMux 支持方法和通配符,重叠路由按更具体的模式优先;只有双方都不更具体时才冲突并在注册时触发 panic。本文用真实模式拆解方法、路径、主机和注册顺序的边界。342 收藏 -
用 Go 1.24 的 strings.FieldsSeq 逐项读取空白分隔日志,比较 Fields 的切片结果,演示找到目标后短路退出以及字符串切片的生命周期边界。341 收藏