Go语言技术文章
-
通过 Go testing.T.Cleanup 的资源夹具示例,说明同一个测试对象为何按后注册先执行,并梳理父子测试、失败路径与并行测试的清理边界。232 收藏 -
讲清 Go errors.Join 在资源清理中的用法:如何合并主错误与 Close 错误、批量保留多个清理错误,并用 errors.Is 与 errors.As 做判断。108 收藏 -
讲清 Go errors.As 如何穿过 %w 包装错误提取自定义类型,说明指针目标的正确写法、false 与 panic 的边界,以及错误链在业务工作流中的接入方式。263 收藏 -
多个 Go 生产者不要争抢 close 权限:用独立停止信号让生产者退出,用 sync.WaitGroup 确认全部结束,再由唯一协调者安全关闭输出通道。497 收藏 -
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 收藏