Go问答技术文章
-
Go 拉取私有模块时,GOPROXY、GOPRIVATE、GONOPROXY 与 GONOSUMDB 的职责不同。本文按直连仓库和私有代理两种架构给出配置,并用回退规则定位 404、403 与 sumdb 校验错误。298 收藏 -
多模块 Go 仓库里,go test ./... 只覆盖当前模块并不一定是测试失效。本文从 go.work、use、replace 和模块边界入手,给出补齐工作区并逐模块测试的实用做法。481 收藏 -
go work sync 会把工作区的构建列表同步回 use 指定的各个模块,因此 go.mod 可能新增间接依赖或升级版本。本文给出确认工作区、区分单模块依赖、整理 go.mod 的实用步骤。478 收藏 -
Go workspace 中 replace 能让多模块联调通过,但单模块构建仍可能因 GOWORK、require、module 路径和本地目录边界失败。本文给出分层排查与独立构建检查方法。245 收藏 -
Go 调低 GOMEMLIMIT 后 CPU 变高,通常是软内存上限收紧让 GC 更频繁。本文从 Go runtime 账本、堆目标、容器边界和 runtime/metrics 指标入手,区分 GC 压力、业务分配和外部内存风险,给出可回滚的定位清单。387 收藏 -
Go 容器内存限制不是 GOMEMLIMIT 的等价物。本文区分 cgroup 硬上限、Go 运行时软上限和 GOGC,并给出预留余量、指标观测与灰度回滚方法。163 收藏 -
GOMEMLIMIT 是 Go runtime 的软内存上限,设置后 RSS 仍可能上涨。本文用 runtime/metrics 区分当前上限、runtime 账本、存活堆和容器 RSS,排查 cgo、mmap、GC 周期与容器余量。422 收藏 -
runtime/metrics 适合读取 Go 运行时定义的指标,expvar 适合发布应用自己维护的公开变量。本文用采样、名称兼容和版本边界说明两者怎么选。357 收藏 -
Go runtime/metrics 采样太频繁时,先区分 Read、快照处理和导出成本,再通过复用 Sample、筛选指标和异步批量上报降低开销。354 收藏 -
Go runtime/metrics 读不到自定义名称时,先检查 runtime.Version() 和 metrics.All(),确认完整指标名、单位与版本支持集合,再把业务自定义指标交给独立采集层。404 收藏 -
Go pprof 里的 CPU、mutex 和 block profile 关注的不是同一件事。本文用一个采集窗口说明三者的开关、命令、栈位置和适用边界,帮助你判断到底是 CPU 忙还是 goroutine 在等锁、等通道。250 收藏 -
Go 的 block profile 记录的是同步原语上的阻塞时间,不只包含 Mutex。本文教你从等待栈区分 Mutex、RWMutex、WaitGroup 和 channel,并用 mutex profile 找到真正持锁的代码。378 收藏 -
Go mutex profile 没有热点时,先用 runtime.SetMutexProfileFraction(-1) 读取开关,再确认采样比例、竞争窗口和 pprof 进程;本文还区分 mutex profile 与 block profile 的排查边界。151 收藏 -
Go 基准测试开启内存分配报告后,结果变化不一定代表业务代码变慢。本文从计时边界、b.ReportAllocs、B/op、allocs/op 和重复运行入手,区分真实分配与测量噪声。384 收藏 -
Golang · Go问答 | 6天前 | 性能优化 · Go问答 · benchmark · Go测试 · 性能测试 Go 内存分配 testing.AllocsPerRun BenchmarkAllocsPerRun
Go 的 testing.AllocsPerRun 数值变化大时,先排查初始化、输入状态复用、并行测试和后台分配,再决定增加 runs 还是改用 benchmark。本文按测量边界、稳定输入和指标分工给出一套可执行的检查顺序。223 收藏