Go问答技术文章
-
Go 服务端关闭 HTTP/2 后,客户端仍可能复用已经建立的 HTTP/2 连接。本文区分协议策略与连接生命周期,给出 Server.Protocols、Transport 清理和 httptrace 验证方法。479 收藏 -
FileTransportFS 常与 file 协议绑定,是因为 http.Transport 按 URL scheme 分派已注册的 RoundTripper,而不是该函数内部强制拒绝其他协议。本文讲清 Go 1.22+ 的正确注册方式、直接替换 Transport 的区别、路径规则和迁移检查项。465 收藏 -
解释 Go MaxBytesReader 在请求体超限时如何返回 MaxBytesError、通知服务器关闭连接,以及 ResponseWriter 包装和中间件顺序为何会影响该信号。399 收藏 -
解释 Go net/http ResponseController.Flush 返回 ErrNotSupported 的原因,拆解 ResponseWriter 包装、Unwrap、FlushError 和代理缓冲边界。197 收藏 -
FileHeader.Filename 是客户端提交的展示元数据,即使 Go 做了基础名处理,也不应直接决定服务器路径。本文用随机存储名、扩展名白名单和受控目录完成安全保存。412 收藏 -
ReadForm 的 maxMemory 主要约束文件内容,普通字段仍以字符串保存在内存。本文拆解其预算边界,并给出请求体、字段与临时文件的安全限制方法。202 收藏 -
Go 的 multipart.Writer 设置自定义 boundary 时,必须在创建第一个 Part 前完成。本文解释调用顺序、请求头一致性、参数限制与排查清单。284 收藏 -
解释 Go mime/multipart 的 NextPart 为什么隐藏 Content-Transfer-Encoding 并在读取时自动解码 quoted-printable,给出 NextRawPart 保留原始字节的写法与选择边界。474 收藏 -
解释 Go slog.WithGroup 空组名的真实行为,区分无操作、命名组与空键 Group 的内联规则,并给出自定义 Handler 和字段冲突的处理方式。260 收藏 -
解释 Go slog LevelVar 修改后旧 Handler 仍能生效的原因,比较动态 Leveler 与静态 slog.Level 快照,并给出配置和测试方法。193 收藏 -
解释 Go slog LogValuer 递归引用为何会得到错误值,拆解 Value.Resolve 的有限求值、Group 边界、Handler 处理方式和四组测试。158 收藏 -
解释 Go slog ReplaceAttr 中 groups 为空、零值 Attr、空名称 Group 内联的差别,并给出按分组路径脱敏、删除内置字段和避免回调递归的安全写法。405 收藏 -
fstest.TestFS 报错通常不是测试器过于严格,而是自定义 fs.FS 在路径合法性、目录元数据、文件重复读取、expected 清单或并发修改上没有满足 io/fs 约定。本文用 MapFS 拆解定位顺序和修复边界。156 收藏 -
Go fs.Glob 的设计就是忽略目录读取时的 I/O 错误,默认只把非法匹配模式作为返回错误。本文拆解 GlobFS 与 ReadDir 分支,并给出用 WalkDir 保留目录错误的处理方案。427 收藏 -
解释 Go fs.Sub 为什么拒绝包含 .. 的路径,拆解 ValidPath 规则,并比较 embed.FS、os.DirFS、os.Root 的适用边界与排错方法。433 收藏