Go问答技术文章
-
os.DirFS 把目录包装成 io/fs.FS,但它不等于 chroot;filepath.Join 只能拼接本地路径,fs.ValidPath 负责校验 FS 名称,符号链接仍可能把访问带出根目录。439 收藏 -
Go 程序用 os.CreateTemp 创建临时文件后,删除失败往往不是路径问题,而是文件句柄仍被占用。本文用一个可复现的导入场景拆开 CreateTemp、Close、Remove 的顺序,并说明 Windows 与 Unix 文件系统的行为差异、错误定位和安全清理写法。435 收藏 -
bytes.Reader.Seek 的负位置不是普通读取失败,而是偏移计算越过了起点。本文用可运行示例拆开 whence、offset、返回位置和错误处理边界,并说明为什么不能继续读取。435 收藏 -
Go 服务里用 time.Ticker 做周期任务时,真正容易出问题的不是 tick 间隔,而是任务退出后计时器、goroutine 和下游资源没有一起收尾。本文用可复现的长期任务场景拆解 Stop 的边界、退出信号和复查方法。434 收藏 -
Go 1.25 新增的 sync.WaitGroup.Go 把 goroutine 启动与计数绑定起来。本文用批量任务示例讲清启动时序、Wait 边界、panic 约束和异常收口方式。434 收藏 -
Golang · Go问答 | 17小时前 | 密码学 · Go问答 · 安全编程 · crypto/subtle · Go crypto/subtle ConstantTimeSelect 固定时间 侧信道
crypto/subtle.ConstantTimeSelect 只接受 0 或 1,并在两个候选整数之间做固定时间选择。本文用 ConstantTimeEq 生成选择值,解释它适合保护什么、不能替代哪些安全边界,以及如何用测试核对结果。433 收藏 -
用 netip.Prefix.Contains 判断 IPv4、IPv6 网段归属,重点核对地址族、Masked 规范化和边界测试,避免把字符串比较或映射地址混进访问控制。432 收藏 -
解释 Go http.Request.GetBody 的生成条件,区分可重读请求与流式请求,并给出重试、内存控制和上传场景的检查方法。431 收藏 -
Golang · Go问答 | 1天前 | net/http · Go问答 · HTTP响应 · 连接控制 · Go FLUSH http.ResponseController Hijack ErrNotSupported
http.ResponseController 把 HTTP 响应刷新和连接劫持能力统一到一组探测方法中。本文用真实 Handler 场景拆开 Flush、Hijack 与 ErrNotSupported 的调用边界,说明什么时候应当回退,以及如何验证响应状态。430 收藏 -
Go 解析流式 JSON 时遇到 SyntaxError,Decoder.InputOffset 能告诉你解码器已经读到哪个字节,但它不是行号也不是错误字符的万能定位器。本文用带换行的请求体演示如何结合错误信息、原始字节和 Decode 循环缩小排查范围。429 收藏 -
Go 1.26 提供了实验性的 goroutineleak pprof 画像,可在构建时启用后观察疑似泄漏的 goroutine。本文从一个等待链问题切入,说明如何开启、采样、区分真实泄漏与暂时阻塞,并给出回归核对边界。428 收藏 -
CloseIdleConnections 只处理 Transport 中已完成请求、当前处于 keep-alive 空闲状态的连接,不会中断正在使用的连接。本文用可复现代码拆开它与 MaxIdleConnsPerHost、IdleConnTimeout 的边界。428 收藏 -
Golang · Go问答 | 1天前 | 性能优化 · Context · go并发 · 故障排查 · 接口开发 · Go goroutine泄漏 context.WithCancel 请求生命周期 defer cancel
调用 context.WithCancel 并不自动消除 goroutine 泄漏。关键在于 cancel 的调用位置、子协程是否监听 Done,以及请求提前返回时能否及时结束。本文从一个持续增长的接口现场拆出根因、修复和复查方法。427 收藏 -
以一个订单接口为例,拆开 Go 1.27 encoding/json/v2 的迁移步骤,核对字段标签、旧 JSON 兼容性、测试策略与可回滚边界。426 收藏 -
用 Go 的 http.Server.ConnState 观察连接从建立、活跃、空闲到关闭的状态变化,并结合超时和异常断开日志定位连接问题。425 收藏