Go语言技术文章
-
Go ticker 本身不会无限累积任务,长时间运行后出现漂移通常与任务耗时、接收延迟或完成后重新等待有关。本文用固定截止时间解释跳过与补偿的选择。247 收藏 -
Go context.AfterFunc 适合在上下文取消时触发连接、临时文件等资源的兜底回收,但 stop 只解除回调关联,不等待回调结束。本文用 stop、完成信号和 sync.Once 拆解正常完成与取消竞态。202 收藏 -
Go 程序在精简容器中调用 time.LoadLocation 报 unknown time zone,通常是镜像没有 IANA 时区数据。本文按查找顺序解释根因,并比较安装 tzdata、嵌入 time/tzdata 与显式加载数据的取舍。375 收藏 -
context.AfterFunc 的 stop 函数只负责阻止尚未启动的回调,不保证等待。本文用 sync.Once 和 done 通道封装主动 Close 与 Context 取消,避免资源清理重复执行。292 收藏 -
Go 的 time.Time 用 == 比较失败,通常不是时间点不同,而是 Location 或单调时钟读数不同。本文解释 Equal、Round(0) 与 UTC 的使用边界。298 收藏 -
讲清 Go http.Request.Clone 复制请求并替换目标 URL 的正确写法,覆盖 Host、RequestURI、查询参数和 Body 重发边界。412 收藏 -
Go DNS 查询在容器里超时时,不要先把问题归因于业务服务。本文用容器内 resolv.conf、net.Resolver、Resolver.Dial、DNSError 和直连 IP,把配置、DNS 网络、解析响应与业务连接分层排查。248 收藏 -
Go url.Values 的空值并不等于没有参数:空字符串会编码成 key=,空切片不会输出该键,重复值会按添加顺序展开。本文用 Encode 和 ParseQuery 对照说明三种状态,并给出 Set、Add、Del 的选择边界。209 收藏 -
Go 使用 net/http 访问 IPv6 地址时,URL 格式错误通常来自缺少方括号或直接拼接 host:port。本文用 net.JoinHostPort 和 url.URL 说明正确构造方式,并区分格式、解析和连接错误。261 收藏 -
Go net/url 处理重复查询参数时,应从 url.Values 的 []string 读取并用 Add 追加;本文说明 Get、Set、Encode 与 RawQuery 的顺序边界。415 收藏 -
Go TLS 配置 MinVersion 后旧客户端无法连接,通常是双方允许的协议版本没有交集。本文用版本范围、握手错误和 ConnectionState 说明如何定位,并给出兼容策略。483 收藏 -
Go 上传接口要限制请求体,应该在 Handler 入口用 http.MaxBytesReader 包住 r.Body,再用 errors.As 识别 *http.MaxBytesError 并返回 413。本文还区分 Content-Length 预检查与 multipart 的 maxMemory。134 收藏 -
Go 客户端只在生产环境出现 x509 证书错误时,从系统根证书、容器 CA 包、证书链和 ServerName 四层排查,并用安全配置完成修复。112 收藏 -
Go http.Server 的优雅关闭超时不是 Server 的固定字段,而是传给 Shutdown 的 context 截止时间。本文用信号、5 秒预算和错误处理示例说明配置方式,以及 WebSocket 等劫持连接的边界。433 收藏 -
Go 请求设置 Context 超时后,客户端会先结束这次请求的等待,但连接池状态和服务端任务不一定同时消失。本文区分请求取消、Transport 连接复用、响应体关闭以及服务端 Context 传播,给出可执行的排查和处理方式。180 收藏