Go问答技术文章
-
Go 流式响应发送 Trailer 时,已知字段名必须在首次 WriteHeader、Write 或 Flush 前通过 Trailer 响应头声明;正文写完后再设置最终值。本文用一个 NDJSON 小项目讲清服务端顺序、客户端 EOF 读取、TrailerPrefix 边界和自动化验收。215 收藏 -
Go Header 的值是字符串切片:Set 会替换旧值,Add 会追加新值。本文从键名规范化、单值与多值字段、重复写入来源和 Values 检查四个角度说明如何选择方法并排查重复字段。240 收藏 -
解释 Go ResponseController.Flush 为什么返回不支持,比较 errors.Is 降级、ResponseWriter Unwrap 修复和旧版 Flusher 断言,并给出可执行测试。425 收藏 -
Go Handler 读取请求体后下游为空,通常是前置组件消费了 Request.Body。本文给出解析一次传递 Payload、兼容旧下游重建 Body,以及大小限制和错误处理方案。442 收藏 -
Go HTTP 中间件重复写响应头,通常是前一层已提交错误响应却仍调用后续处理器。本文从提交边界、调用链、临时探针和响应所有权测试逐层定位。270 收藏 -
Go ServeMux 在模式互相重叠且谁都不更具体时会在注册阶段 panic。本文用请求集合规则解释路径变量冲突、定位方法、重构策略与测试边界。350 收藏 -
ErrWaitDelay 通常表示命令已成功退出,但 os/exec 管理的 I/O 管道在 WaitDelay 内仍未关闭。本文解释计时起点、后代进程继承描述符的常见原因、错误优先级和可落地的修复方式。333 收藏 -
Go 的 url.URL 同时设置 Path 和 Opaque 时,String 会根据 URL 形态选择层级路径或 scheme:opaque 表示,两个字段不会简单拼接。本文用最小结构对比、查询参数边界和回归清单说明正确构造方式。170 收藏 -
解析 Go 查询字符串时,url.ParseQuery 可能同时返回错误和部分 Values。本文用源码顺序说明合法参数为何保留、错误项如何跳过,以及 HTTP 入口该如何选择严格策略。311 收藏 -
Go 的 URL.RawPath 只是 Path 的可选编码提示。只有编码形式有效且反转义后与 Path 完全一致,EscapedPath 才会采用它;否则会忽略 RawPath,并从 Path 重新生成转义结果。370 收藏 -
解释 Go url.JoinPath 为什么会在输出中保留或生成百分号编码,区分 URL.Path、RawPath、EscapedPath、PathEscape 与 QueryEscape,并处理斜杠和点段边界。140 收藏 -
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 收藏