Go问答技术文章
-
Golang · Go问答 | 2个月前 | 云原生 · golang · 性能优化 · kubernetes · Go HPA不扩容 Kubernetes HPA CPU resources requests HPA并发指标 Go服务扩缩容
Go 服务部署到 Kubernetes 后,HPA 没有按预期扩容,常见原因不是 HPA 失效,而是 CPU 利用率与 requests 的关系、业务真实瓶颈和缩放行为没有对齐。本文用最小 HPA 配置说明何时选 CPU、何时考虑并发或队列指标,以及如何避免扩缩容抖动。111 收藏 -
Golang · Go问答 | 2个月前 | golang · 消息队列 · 性能优化 · websocket · 高并发 · Go WebSocket广播 Go慢客户端 WebSocket发送队列 Go Hub分片 WebSocket背压
Go WebSocket 广播卡顿,常常不是 CPU 不够,而是一条慢连接把广播路径堵住了。本文从一个房间广播现场出发,说明为什么要给每个客户端独立发送队列、如何确定队列满时的业务策略,以及何时需要按房间分片 Hub,并给出可观测的检查项。146 收藏 -
Golang · Go问答 | 2个月前 | 性能排查 · net/http · HTTP客户端 · Go问答 · 连接复用 keep-alive http.Transport Response.Body Go HTTP Client
Go 服务的请求量并不高,客户端却不断新建 TCP 连接时,先看 Response.Body 是否在所有分支读到 EOF 并关闭。Go 官方文档说明,Body 未同时读完和关闭时,底层 Transport 可能无法复用持久连接。本文从一次连接数异常的现场出发,给出定位、修复和边界判断。241 收藏 -
Go 服务出现 too many open files 时,先不要只把 ulimit 调大。更可靠的处理顺序是确认 FD 是否持续增长、按类型定位 HTTP 响应体/文件/SQL Rows 的释放缺口、在小流量修复后观察 FD 回落,再决定是否需要调整进程限额。文章给出可直接照着做的线上判断、代码修复、回退和告警检查。115 收藏 -
Go 的 time.Parse 不认识 YYYY-MM-DD 这类常见日期格式符,它用 2006-01-02 这组参考时刻来描述布局。文章从解析失败的报错入手,给出最小修复、UTC 与业务时区的边界、ParseError 的定位字段和可回归的日期测试,避免日期字段在接口或报表中悄悄偏移。443 收藏 -
Golang · Go问答 | 2个月前 | HTTP · net/http · Go问答 · Go WriteHeader ResponseWriter HTTP 状态码 superfluous response.WriteHeader
Go 服务日志出现 superfluous response.WriteHeader,通常不是框架故障,而是同一个请求路径已经写出最终状态码,后续分支又继续写了一次。文章用一个订单创建接口复现问题,解释 Write 与 WriteHeader 的先后边界,并给出 return 收口、响应助手分层和 httptest 回归检查的最小修复方案。258 收藏 -
Go 把切片传入函数时,底层数组可能仍被共享,但切片头会按值传递。文章用最小示例解释 append 后为什么调用方的长度不变,给出返回新切片、指针修改与预分配三种边界清楚的写法,并说明 cap 足够时容易看到的隐藏覆盖。226 收藏 -
Go 1.23 支持对特定函数类型使用 for range。文章给出 iter.Seq 的最小写法,解释 yield 返回 false 的停止契约、三种允许签名、go.mod 版本边界和面向旧工具链的采用建议。251 收藏 -
Go 1.22 将 for 循环声明的变量改为每次迭代独立,但新语义是否生效取决于模块 go.mod 的 go 版本:只有声明 go 1.22 或更高版本的模块会启用。升级时应重点复查 goroutine、闭包和 t.Parallel 子测试;旧版模块中的变量拷贝仍可能是必要保护,不能只因编译器升级就批量删除。277 收藏 -
Golang · Go问答 | 2个月前 | 依赖管理 · golang · 私有仓库 · 工程实践 · GOPROXY GOPRIVATE GONOPROXY GONOSUMDB Go私有模块 go mod download
Go 拉取私有模块时,报错往往不是凭据本身失效,而是模块路径先被公共代理或公共校验服务请求。先用 GOPRIVATE 标记私有路径,再按公司是否部署私有代理决定 GONOPROXY 与 GONOSUMDB 的边界,最后用 go env 和 go mod download 收敛问题。288 收藏 -
Golang · Go问答 | 2个月前 | interface · 测试 · 架构设计 · Go问答 · Go 接口设计 接口定义位置 Go mock accept interfaces return structs Go 架构
Go 接口通常应放在使用方包里,而不是实现方为了 mock 提前导出一大组接口。本文通过调用方依赖、真实测试与多实现边界,说明什么时候该定义小接口,什么时候直接返回具体类型更清晰。300 收藏 -
Golang · Go问答 | 2个月前 | goroutine · Context · Go问答 · goroutine泄漏 context.WithTimeout Go问答 CancelFunc Go context取消 Go服务超时
Go 服务已经返回超时,但后台 goroutine 仍在消耗连接和内存,往往不是超时参数太小,而是取消信号没有沿调用链传递或 CancelFunc 没有及时调用。本文给出从症状判断、代码修复到告警复盘的排查清单。304 收藏 -
用 Go 标准库实现 HTTP 文件上传时,不能只调用 FormFile 就直接落盘。本文通过一个最小项目说明请求体大小限制、multipart 解析、文件关闭、受控命名和上传后检查的实现顺序。466 收藏 -
Go 测试偶发失败时,可能是测试顺序依赖了共享状态。本文说明 go test 的 -shuffle 如何随机顺序、如何保存种子复现,以及怎样用隔离状态和清理逻辑修复问题。132 收藏 -
Go 测试容易因临时文件残留、环境变量串值而偶发失败。本文整理 t.TempDir、t.Setenv 和 t.Cleanup 的使用顺序、并行限制和检查清单,让测试资源能自动收口。245 收藏