Go语言技术文章
-
Go GOPROXY 返回 404 不一定说明版本写错,也可能是当前代理没有该模块或回退链没有按预期生效。本文按配置、版本列表和代理协议请求逐层判断原因。291 收藏 -
go test -json 会把多个包的测试和构建信息写成交错的 JSON 事件流。本文说明如何用 Package 归档测试输出,用 Action、ImportPath 和 FailedBuild 识别构建事件,避免把日志归到错误的包。143 收藏 -
解释Go模块checksum mismatch的含义,按项目记录、缓存、代理和版本改写定位差异,提供独立缓存诊断命令,并说明删除go.sum或关闭认证为何不能代替修复。376 收藏 -
Go test -run 使用不锚定正则筛选测试,遇到子测试时还会按斜杠拆分名称;本文整理顶层测试、t.Run 路径、名称清洗和命令引号导致匹配不到的排查方法。156 收藏 -
Go 1.27 的 vet 可能提示 %w 包装了错误类型指针。本文解释值接收者、动态类型与 errors.Is/As 的关系,并给出修复和复查方法。423 收藏 -
Go 1.22 改变了 for 循环变量的作用域。本文从 go.mod、闭包捕获和 GOEXPERIMENT=loopvar 三个线索判断代码使用的是新语义还是旧语义,并说明何时仍需显式传参。310 收藏 -
Go 的 iter.Pull 可以把 iter.Seq 这种推送式迭代器转换为 next 和 stop 两个主动拉取函数。本文用一个小型筛选场景说明 ok 结束信号、提前停止和 defer stop 的正确边界。500 收藏 -
从Wait提前返回与计数错误切入,说明WaitGroup零计数时Add必须先于Wait的规则,提供启动前登记、独立结果槽位示例,并检查Done配对、值复制和批次复用。278 收藏 -
Go 的 Request.Context 取消只是通知,HTTP Handler 是否退出取决于代码有没有把取消信号传到阻塞点并主动返回。本文按请求、下游调用、goroutine 和响应写入四个边界排查这个问题。317 收藏 -
Go 中无缓冲 channel 的发送必须等接收方出现;如果调用方提前 return,发送 goroutine 就可能永久阻塞。本文用最小示例解释泄漏原因,比较缓冲与取消方案,并给出 goroutineleak/pprof 的排查思路。269 收藏 -
Go slices.All 会把切片转换成按顺序产生索引和值的迭代器,配合 range 就能保留传统遍历的两个变量。本文从返回类型、空切片、提前停止和写回原切片几个边界说明它的使用方式,并比较何时直接 range 更简单。217 收藏 -
sync.Map 不是普通 map 的默认替代品。本文从访问模式、类型安全、复合更新和遍历语义四个角度,说明什么时候适合使用 sync.Map,什么时候应保留 map 配合 Mutex 或 RWMutex。281 收藏 -
Go 的 http.Transport 默认会缓存连接,但连接池并不是无条件复用。每次重新创建 Transport、Response.Body 没有读完并关闭、主动关闭 keep-alive、空闲连接超时、每主机连接上限以及服务端协议设置,都可能让请求重新建连。本文用 httptrace 定位原因,并给出稳定的 Transport 管理方式。237 收藏 -
区分Go HTTP客户端单次请求预算、响应体读取与外层重试总耗时,提供绑定Context并限制读体大小的示例,解释阶段超时、错误记录和资源释放。415 收藏 -
Go json.Unmarshal 遇到 JSON null 时会按目标类型处理:指针字段被设为 nil,普通 string 等非指针字段通常保持原值。本文用结构体示例拆开指针、普通字段和字段缺省的边界,帮助排查接口入参中的 nil 现象。158 收藏