Go问答技术文章
-
Go module checksum mismatch 不要先删 go.sum。本文通过 go mod download -json、go.sum、GOSUMDB 与 GOPROXY 对照,判断是内容变化、代理缓存还是私有模块配置边界。328 收藏 -
Go 业务超时应优先使用 time.Now 保留的单调时间语义,日志和跨服务协议则使用墙上时间或剩余 Duration。本文拆解校时影响、API 选择、序列化边界和 RPC deadline 的决策方法。328 收藏 -
用 errgroup.WithContext、SetLimit、TryGo 和 Wait 处理 Go 并发读取与转换任务,讲清并发上限、错误取消、结果收口和常见边界。327 收藏 -
Go crypto/x509 中把自签名根证书加入 Roots 仍验证失败时,重点检查 Intermediates、服务器发送链、DNSName 和错误类型,本文给出可复用的排查代码与部署清单。327 收藏 -
Go sync.Pool取回旧对象时,问题通常来自复用对象没有建立完整的初始化协议。本文从Get后的重置、Put前的所有权检查和并发排查三个方面说明如何消除残留状态。327 收藏 -
Go archive/zip 出现 directory size overflow 时,先区分单个文件大小、ZIP 中心目录大小和旧实现的 32 位字段限制,再按流式写入、Zip64、Close 错误和消费端兼容性逐项排查。326 收藏 -
Go HTTP 客户端已复用 Client 与 Transport,连接数仍上涨时,应检查 Response.Body 是否读到 EOF 并关闭。本文给出小响应体、错误状态码和大响应体的处理策略,并说明 HTTP/1.x 连接复用的边界。326 收藏 -
RWMutex 不会天然比 Mutex 快。本文用并发配置缓存说明读写锁的临界区边界、待写者阻塞新读者、不可升级降级等语义,并给出可调整读写比例的基准模板,帮助你按真实竞争场景做选择。325 收藏 -
Go 的 Rows.Next 返回 false 既可能是正常读完,也可能是遍历途中出错。本文说明 Rows.Err、Scan 和 Close 各自负责什么,并给出完整查询模板。324 收藏 -
Go TLS 客户端遇到证书错误时,直接设置 InsecureSkipVerify=true 只会关闭证书链和主机名校验。本文按错误分支拆开 ServerName、RootCAs 与 VerifyConnection,给出保留安全校验的排查和配置方式。323 收藏 -
Go errors.Join 会丢弃传入的 nil 错误;如果所有参数都是 nil 则返回 nil,否则返回只包含非 nil 成员的组合错误。本文用边界输入说明如何判断和检查成员。320 收藏 -
flate.NewReaderDict 只初始化解压状态,不会在构造时读取并验证完整数据;字典不一致通常到 Read 或 io.Copy 展开回溯引用时才暴露,而且可能表现为 corrupt input,也可能静默产出错误字节。本文给出诊断与协议修复方法。320 收藏 -
Go encoding/gob 解码到已有结构体时不会先清空目标,流中缺少的字段和发送端被省略的零值字段可能继续保留旧内容。本文用最小示例说明字段合并语义,并比较复用目标、解码到新变量和存在性字段三种处理方式。319 收藏 -
用 database/sql 的 ColumnTypes 处理动态查询列:字段白名单负责安全,参数绑定负责值,ColumnTypes 负责结果元数据与稳定组装。319 收藏 -
从 G、M、P 的阻塞表现出发,把 Go 长时间 CPU 计算拆成可恢复批次,用 context、有界 worker 池和 execution trace 控制延迟、取消与并行度。319 收藏