Go语言技术文章
-
Go 动态查询不知道列数时,用 Columns 创建接收槽位,以 *any 安全处理普通值与 NULL,再结合 ColumnTypes 和 rows.Err 完成通用扫描。328 收藏 -
Go DNS 查询超时后仍看到延迟,常见原因不是 context 失效,而是调用了不带 context 的包级函数、纯 Go 解析发生重试,或 cgo 底层阻塞调用尚未收尾。本文给出区分三种情况的排查与写法。229 收藏 -
Go 的 Rows.ColumnTypes 不直接返回 nil 长度,ColumnType.Length 返回 int64 与 ok。本文区分固定长度、无界类型、驱动不支持和业务包装层 nil,并说明如何把长度元数据与 SQL NULL 分开处理。128 收藏 -
Go net.Resolver.PreferGo 改变域名解析结果时,先区分 Go 内置解析器与系统解析器,再检查 DNS 配置、A/AAAA 部分结果和 context 超时,避免把解析路径差异误判成 DNS 故障。166 收藏 -
Go database/sql 通过 Rows.ColumnTypes 读取查询结果的列名、数据库类型、长度、精度、可空性和建议扫描类型,并说明驱动不支持与 SQL NULL 的处理边界。319 收藏 -
Go HTTP 请求已经超时,但服务端日志还在继续时,先分清客户端、请求上下文和服务端 deadline 三个边界,再检查下游是否真正收到 ctx,最后用 Err 与 Cause 记录责任归属。465 收藏 -
Go 证书主机名校验失败时优先检查 SAN,不要把 CN 当作现代校验依据;本文区分 DNS SAN、IP SAN、ServerName 与 RootCAs,并给出自定义 CA 的排查和配置方法。272 收藏 -
Go 中 context.Err 只能说明上下文因取消还是 deadline 结束,不能代替下游函数自己的 error。本文用 WithCancelCause、Cause 和错误映射示例,拆开判断上游取消、超时与下游失败。398 收藏 -
讲清 Go x509.SystemCertPool 在 Linux 容器、macOS 和 Windows 中的兼容处理:系统池优先,异常时回退,追加自定义 CA,并区分根证书、PEM 和主机名错误。327 收藏 -
context.Cause 在取消发生前返回 nil。本文用 WithCancelCause 和 WithTimeoutCause 说明读取时机、Err 与 Cause 的区别,以及下游错误映射边界。456 收藏 -
Go 客户端访问内网 HTTPS 服务时,如何保留系统根证书并追加自定义 CA,正确配置 x509.CertPool、tls.Config 和 http.Transport。255 收藏 -
Go Transport 参数调大后延迟不一定下降。本文从 Client 生命周期、空闲连接与并发上限、Response.Body 关闭和可观测信号四个方面排查原因。407 收藏 -
Go 的 CheckRedirect 返回自定义错误时,Response 可能仍非空但 Body 已关闭;如果要读取最后一次响应,应返回 http.ErrUseLastResponse,并在调用方负责读取和关闭 Body。285 收藏 -
Go 的 http.Client 内部依赖 Transport 的连接缓存。本文用一个可复用请求示例说明 Client 生命周期、Response.Body 关闭和连接复用的关系。236 收藏 -
Go 的 http.Client 跟随重定向时,Authorization 并不是随机丢失。本文用重定向链、目标域名和 CheckRedirect 说明敏感请求头的转发边界,并给出可信目标允许、跨域停止和错误判断的写法。212 收藏