Go问答技术文章
-
Golang · Go问答 | 1星期前 | 标准库 · 单元测试 · 资源管理 · Go问答 · Go testing.T.Cleanup Cleanup 注册顺序 Go 子测试资源释放 testing 包
Go testing.T.Cleanup 采用后注册先执行的顺序,并且父测试的清理会等所有子测试完成后才运行。本文用嵌套测试和失败场景拆开注册时机、执行边界与资源释放写法。414 收藏 -
Go 1.27 引入泛型方法后,方法可以声明自己的类型参数,但接口方法仍不能声明类型参数。本文用 Rand.N、函数类型推断和接口边界说明如何判断代码能否编译,以及如何保留兼容性。474 收藏 -
io.Pipe 用同步内存管道连接 Reader 和 Writer。写端 CloseWithError 会把错误传给后续读取,nil 则得到 EOF;本文用一个小实验拆开写入、读取消费、错误关闭和重复关闭的边界。486 收藏 -
Go 的 net/url 会把 URL 路径解码到 Path,同时用 RawPath 保留可复原的编码提示。掌握 URL.EscapedPath 的判断规则,才能在 %2F、路径重写和请求回放场景中稳定保留原始路径语义。340 收藏 -
Go 里 iter.Seq 是惰性遍历函数,slices.Collect 会把它完整收集成切片。文章用一个分页数据场景说明如何提前停止、如何估算内存,以及什么时候不该直接 Collect。100 收藏 -
用 Go 的 net/http ServeContent 提供可断点读取的文件响应,重点看 Range、Content-Range、io.ReadSeeker 和条件请求之间的边界,避免手写文件分片时遗漏偏移与缓存处理。360 收藏 -
解释 Go tls.Config.Clone 的浅复制语义、并发使用边界、会话票据共享风险与证书轮换写法。275 收藏 -
Go 1.21 引入的 clear 可以一次删除 map 的全部元素,但它不负责并发保护,也不等于立刻把底层内存还给操作系统。本文用可运行基准拆开清空速度、复用场景和重建 map 的边界。487 收藏 -
用 Go 的 slog.LogValuer 控制日志字段的延迟求值与脱敏,厘清日志级别过滤、LogValue、slog.String 和 slog.Group 的调用边界。154 收藏 -
解释 Go 文件写入、Sync 和 Close 的边界,给出临时文件替换与错误处理的可验证写法。249 收藏 -
bytes.Reader 读到末尾后,Seek、Reset 和重新创建 Reader 的效果并不相同。本文用可运行的小例子拆开读取游标、底层字节切片和并发复用边界,帮助你选对复位方式。456 收藏 -
用一个有界任务队列拆开 Go sync.Cond 的等待谓词、Signal 与 Broadcast 边界,说明锁顺序、虚假唤醒式重检和多消费者通知如何验证。453 收藏 -
Golang · Go问答 | 1星期前 | 性能 · 安全 · 密码学 · Go问答 · API边界 · Go crypto/subtle 侧信道 WithDataIndependentTiming 常量时间
Go 1.24 引入的 crypto/subtle.WithDataIndependentTiming 能在支持的平台上为一段常量时间代码启用架构级时序保护,但它不会把普通的变长代码自动变成常量时间。本文结合 ConstantTimeCompare、闭包边界、panic 清理和非 Arm64 行为,说明什么时候该用、怎么验收。271 收藏 -
slog.Handler.WithAttrs 适合把请求或模块共享的属性提前交给 Handler 复用,但它不是可变日志上下文。本文从属性继承、WithGroup 分组和多 goroutine 使用三个边界说明如何减少重复处理并验证输出。351 收藏 -
flag.VisitAll 遍历的是 FlagSet 中已定义的全部参数,而 flag.Visit 只遍历本次 Parse 或 Set 后进入 actual 的参数。本文用一个命令行配置示例拆开两者边界,说明默认值、重复赋值和未解析参数该怎么排查。393 收藏