Go问答技术文章
-
Go HTTP 连接未复用先查响应体读取关闭与共享 Transport。通过有限响应体封装和 httptrace 说明 HTTP/1.x、HTTP/2、取消及连接池边界,避免把 Close 或延迟变化当作复用保证。165 收藏 -
Go Transport 的 MaxConnsPerHost 限制拨号、活动和空闲连接总数,达到上限可能让请求等待。本文用 HTTP/1 示例解释共享池、trace 信号和响应体释放,并说明 HTTP/2 与调参边界。165 收藏 -
Go 的 compress/flate.Writer.Flush 会把待写压缩数据推到下游,并建立同步边界,因此能降低流式响应的等待感,也会增加写出和压缩边界开销。本文用一个小型流式写入模型说明调用时机。165 收藏 -
gojq.Iter 的 Next 返回 any 和 bool,error 也会作为一项被迭代出来。本文解释这种设计的原因,并给出普通错误、HaltError 与结束信号的处理写法。164 收藏 -
go-message 遇到未知字符集时仍可能返回可用的 Reader 或 Part。本文说明如何识别可恢复错误、继续遍历邮件,并为无法解码的正文保留安全降级路径。164 收藏 -
Go sync.Cond.Wait 必须在持有 Cond.L 时调用。本文说明 Wait 原子释放与重新加锁的边界、为什么要用 for 重新检查条件,以及状态修改、通知和 channel 选择的实用判断。164 收藏 -
Go 接口只有具体类型和值都为空时才等于 nil。本文用最小示例说明 typed nil 指针装进 error 或 any 后为何仍然非 nil,并给出返回、排查和 reflect 的稳妥写法。163 收藏 -
Go 处理 tag=go&tag=web 这类重复查询参数时,应使用 url.Values 的切片模型:用 Add 追加、用 values[key] 读取全部值、用 ParseQuery 检查解析错误,并注意 Encode 的键名排序边界。163 收藏 -
Go net/http.Transport结果不稳定时,先区分传输错误、HTTP状态与正文变化。文章说明连接复用和响应体处理误区,给出有界GET诊断示例,并用httptrace记录复用线索。163 收藏 -
使用 Go crypto/x509 校验证书链时,VerifyOptions.KeyUsages 为空默认按服务器用途处理;为了让配置意图更清楚,可以显式设置 ExtKeyUsageServerAuth,并配合 Roots、Intermediates 和 DNSName 分层排查失败原因。163 收藏 -
Go 的 net.IP.To4 返回 nil,并不只代表输入一定是非法地址:纯 IPv6 会返回 nil,而 IPv4-mapped IPv6 仍能转换为 4 字节 IPv4。本文用三组输入拆开返回边界,并给出地址族判断、IPNet.Contains 和监听配置中的实用写法。163 收藏 -
Go ldflags 注入变量为空时,优先检查包路径、包级 string 变量和最终构建命令。本文用 go list 获取真实 import path,说明 -X 的变量边界、shell 引号和 CI 二次构建覆盖问题。162 收藏 -
Go 目录读取不能只看 error。os.ReadDir 可能返回已经读到的目录项和错误;os.File.ReadDir 按批次读取时要先处理 entries,再区分 io.EOF 与真正的读取失败。162 收藏 -
从 Go HTTP/2 的连接错误和 HPACK 解码证据出发,区分非法索引、字符串编码、动态表更新与头部大小问题,并给出日志分类和修复边界。162 收藏 -
Go x509 证书链验证通过信任检查后,仍可能被中间 CA 的 NameConstraints 拒绝。本文说明 PermittedDNSDomains、ExcludedDNSDomains、叶子证书 SAN 与 VerifyOptions 的关系,并给出错误定位顺序。162 收藏