Go问答技术文章
-
Go 的 OnProxyConnectResponse 回调发生在 Transport 检查 200 OK 之前。本文用代理主机、目标主机、状态码和错误返回说明如何诊断 CONNECT,并区分代理响应、TLS 握手与最终请求失败。455 收藏 -
解释 Go tls.Config.Clone 的浅克隆边界:顶层字段重新赋值不会回写原配置,但切片、映射和会话票据相关状态可能共享,并给出安全派生配置的写法。455 收藏 -
按依赖变更说明Go vendor不自动刷新的原因,区分模块声明、包引用与模块缓存,给出单模块更新和工作区范围处理方法,并对齐CI构建模式与快照提交。454 收藏 -
Golang · Go问答 | 3星期前 | 错误处理 · Go问答 · 流式解码 io.Reader CorruptInputError io.ErrUnexpectedEOF Go base64 base64.NewDecoder
base64.NewDecoder 是流式读取器,遇到截断输入时可能先返回已经完整解出的字节,再在后续读取中报告 io.ErrUnexpectedEOF。本文拆解 4 字符分组、n 与 err 的关系,以及如何避免把部分数据误当成完整结果。453 收藏 -
fmt.Errorf 中的 %w 会保留底层错误并建立可遍历的错误链,%v 只把错误格式化为消息文本。本文用最小示例说明 errors.Is 找不到原始错误的原因、排查方法和自定义包装边界。453 收藏 -
Go TLS 握手卡住时,不要只给 TCP 建连设置超时。通过 DialContext 约束建连、HandshakeContext 约束 TLS 握手,并在失败路径关闭连接,可以让取消信号真正覆盖卡住的握手阶段。453 收藏 -
Go 的 sync.RWMutex 不支持把 RLock 直接升级为 Lock。读锁持有者在写者等待时继续申请写锁,会形成自己等待自己释放读锁的阻塞环。本文解释规则、定位证据和安全改写方式。453 收藏 -
Go TLS 报证书主机名不匹配时,先不要关闭证书校验。本文按连接地址、SNI、SAN、IP 地址、通配符和代理入口逐项核对,并用 VerifyHostname 给出可复用的最小复核代码。453 收藏 -
Go crypto/tls 的 InsecureSkipVerify 会同时跳过证书链和主机名校验。本文说明它的中间人风险,并给出 RootCAs 与 VerifyConnection 的安全替代方案。452 收藏 -
Go 向已关闭通道发送会 panic,增大缓冲、状态探测和 sync.Once 都不能保证安全。本文给出多发送者由协调者等待后关闭的完整示例,并区分取消通知、数据结束与完成信号。452 收藏 -
使用 go/types 做 Go 静态分析时,Info.Types 只能回答表达式类型。本文用原创示例说明如何初始化 Info.Selections,找到嵌入字段最终对应的 Obj,并用 Index、Recv、Indirect 解释选择路径。452 收藏 -
Go HTTP Server 读取请求体后响应变慢,常见原因不是 ResponseWriter 本身,而是客户端上传尚未完成、处理器在等待 Request.Body,或 HTTP/1.x 连接仍有未消费的数据。本文用一个带大小限制的上传接口拆分耗时,说明正确读取顺序、连接复用边界和日志定位方法。452 收藏 -
Go runtime/metrics 提供 automatic、forced、total 三条 GC 周期计数。本文用 metrics.Read 读取它们,并通过相邻采样的增量判断 GC 来自运行时自动触发还是应用主动触发。452 收藏 -
Go 处理不可信图片时,先用 image.DecodeConfig 读取格式配置和宽高,再按 int64 像素预算决定是否进入 image.Decode,避免不必要的完整像素分配。451 收藏 -
Go 的 encoding/json 把 JSON 数字写入 int 时,如果数值超出目标类型范围,会返回 UnmarshalTypeError,而不是自动截断或安全放大。本文从溢出边界、错误定位、字段设计和 UseNumber 四个角度说明怎样处理。451 收藏