Go问答技术文章
-
Go 按平台拆分文件时,文件名后缀本身就是构建约束;本文说明 GOOS、GOARCH、//go:build 的叠加关系,并用 go list 查看实际入选文件,排查同名实现冲突和跨平台测试遗漏。263 收藏 -
Go build tags 复杂组合容易把 AND、OR、文件名后缀和 cgo 条件混在一起。本文用布尔表达式、go list 文件集合和跨环境测试矩阵,说明如何验证每条 build tags 路径。191 收藏 -
发布 Go 模块时,不能只检查 vendor 目录是否存在。通过重新生成 vendor、对照 vendor/modules.txt 和强制 -mod=vendor 构建,可以及时发现依赖版本漂移。312 收藏 -
Go 命令发现 vendor/modules.txt 与 go.mod 不一致时,不要手工改清单。先让 go.mod 和源码恢复准确,再用 go mod vendor 重建 vendor,最后用明确的 -mod 参数验收。159 收藏 -
go mod vendor 后构建仍访问 module cache?从 GOMOD、GOWORK、GOFLAGS、vendor/modules.txt 和 -mod 模式逐层定位。357 收藏 -
GOPROXY=off 只禁止新的模块源通信,不会自动扫描兄弟目录。本文区分主模块、go.work/replace、本地模块缓存和 sumdb 校验链,按错误信息给出离线构建的排查与修复方法。106 收藏 -
Go go.sum 报校验失败时,不要先删文件或关闭 sumdb。本文用 go.sum、GOPROXY、GOSUMDB 和模块缓存的证据,区分代理缓存异常与同版本源码变化。139 收藏 -
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 收藏