-
Go 写 SSE 接口时,关键不是循环写字符串,而是正确设置 text/event-stream、用 http.Flusher 刷新缓冲,并用 Request.Context 感知浏览器断开。本文给出可落地的 Go 服务端与浏览器接收示例,补充心跳、代理缓冲和重连边界。
-
Go 的 http.Response.Body 不是拿到响应头就结束了。本文解释为什么读到 EOF 再关闭有助于 HTTP/1.x 连接复用,以及大响应、未知长度和只关心状态码时如何选择。
-
用一个可复用的 ResponseWriter 包装器统一记录 Go HTTP 请求的状态码和响应大小,覆盖隐式 200、空响应、重复 WriteHeader 与 Flusher 边界。
-
Go 的 http.Transport 可能自动请求并解压 gzip,导致 Response.Body 可直接读取明文,而 Content-Encoding 和 Content-Length 被移除。本文说明触发条件、验证方式以及如何保留原始压缩字节。
-
使用 Go 的 httputil.ReverseProxy 和 Rewrite,把公网 /api 请求安全映射到后端 /internal 基路径,同时处理查询参数、转发头和后端错误。
-
Go 的 ResponseWriter 在第一次 Write 时可能已经隐式提交 200 OK。本文解释为什么正文之后再设置状态码无效,并给出错误分支、响应头和业务结果的稳定写法。
-
Go 两个本地进程可以通过 Unix Socket 通信:服务端使用 ListenUnix 和 AcceptUnix,客户端使用 DialUnix,双方用换行或长度前缀约定消息边界。本文还说明 socket 文件清理、超时、权限和 unixpacket 的选择边界。
-
Go 的 url.Parse 只验证输入能否解析成 URL 结构,不会验证 DNS、TCP、TLS 或 HTTP 服务。本文用分层检查和可超时的 net/http 示例区分解析成功与地址可达。
-
Go 判断 IP 是否属于指定网段时,推荐用 net/netip 的 ParseAddr、ParsePrefix 和 Prefix.Contains。本文给出 IPv4/IPv6 示例,并说明非法输入、地址族不匹配、IPv4-mapped IPv6 与 IPv6 zone 的边界。
-
Go 拼接 URL 时不要直接使用 filepath.Join:文件路径按操作系统规则处理,URL 需要保留 scheme、host、path、query 和编码边界。本文对比 filepath.Join、path.Join、url.JoinPath,并给出路径参数与查询参数的正确写法。
-
Go 读取 PEM 证书时要先用 encoding/pem 解出 DER,再交给 crypto/x509 解析;本文给出读取 DNSNames、IPAddresses、NotAfter 和处理证书链的完整方法。
-
Go encoding/csv 默认按首条记录校验后续列数,本文解释 ErrFieldCount 的原因,并给出固定列定位坏行、变长记录安全读取和字段策略选择方法。
-
使用 golang.org/x/net/html 解析网页中的 a[href],再用 net/url 按页面基准地址补全相对链接,并说明片段、特殊 scheme 与外链控制的处理边界。
-
Go encoding/xml 遇到带命名空间前缀的标签时,匹配关键不是 soap、o 这样的前缀,而是命名空间 URI 与 Local 名。本文用结构体标签和 xml.Name 说明排查方法。
-
Go 处理带 BOM 的 UTF-16 文件时,可以用 golang.org/x/text 的 unicode 与 transform 按 BOM 识别大小端,再流式写出 UTF-8。本文给出临时文件替换方案,并说明缺少 BOM、乱码和并发写入的边界。