Go语言技术文章
-
Go go.sum 报校验失败时,不要先删文件或关闭 sumdb。本文用 go.sum、GOPROXY、GOSUMDB 和模块缓存的证据,区分代理缓存异常与同版本源码变化。139 收藏 -
slices.Insert 批量插入是否复用底层数组,先看插入后的长度是否超过原切片容量,再结合尾部或中间插入位置判断移动成本。本文给出容量判断、别名边界与可复查验证代码。109 收藏 -
Go 拉取私有模块时,GOPROXY、GOPRIVATE、GONOPROXY 与 GONOSUMDB 的职责不同。本文按直连仓库和私有代理两种架构给出配置,并用回退规则定位 404、403 与 sumdb 校验错误。298 收藏 -
Go 1.22 及以上的 slices.Delete 会清零删除后的尾部元素。本文用指针切片说明为什么必须接住返回值,以及旧写法、切片别名和 Clone 应该怎样处理。200 收藏 -
多模块 Go 仓库里,go test ./... 只覆盖当前模块并不一定是测试失效。本文从 go.work、use、replace 和模块边界入手,给出补齐工作区并逐模块测试的实用做法。481 收藏 -
Golang · Go教程 | 1星期前 | 定时任务 · Context · 并发编程 · Go教程 · select time.Ticker context取消 goroutine退出 Go ticker
Go 定时循环阻塞在 ticker.C 时,应该把 ctx.Done 与 ticker.C 放进同一个 select,并把 context 继续传给业务处理;退出路径里调用 ticker.Stop,再等待 worker 收尾。本文区分 Stop、Reset 和重新创建,避免 goroutine 泄漏与错误的通道判断。490 收藏 -
go work sync 会把工作区的构建列表同步回 use 指定的各个模块,因此 go.mod 可能新增间接依赖或升级版本。本文给出确认工作区、区分单模块依赖、整理 go.mod 的实用步骤。478 收藏 -
Go 定时刷新配置时不要在每次配置变化里 NewTicker;让一个控制协程拥有 ticker,周期变化调用 Reset,退出时统一 Stop。161 收藏 -
Go workspace 中 replace 能让多模块联调通过,但单模块构建仍可能因 GOWORK、require、module 路径和本地目录边界失败。本文给出分层排查与独立构建检查方法。245 收藏 -
Go 长循环使用 time.Ticker 时,关键是把退出信号与 ticker.C 放进同一个 select,并在拥有 ticker 的函数退出路径调用 Stop;需要改周期时使用 Reset,同时用完成通知确认 goroutine 已结束。211 收藏 -
Go 调低 GOMEMLIMIT 后 CPU 变高,通常是软内存上限收紧让 GC 更频繁。本文从 Go runtime 账本、堆目标、容器边界和 runtime/metrics 指标入手,区分 GC 压力、业务分配和外部内存风险,给出可回滚的定位清单。387 收藏 -
Go 定时任务如果依赖地区本地时刻,应使用 IANA Location 保存夏令时规则,并用 ParseInLocation 解析无偏移的时间字符串。本文给出加载、解析和运行前检查的完整边界。363 收藏 -
Go 容器内存限制不是 GOMEMLIMIT 的等价物。本文区分 cgroup 硬上限、Go 运行时软上限和 GOGC,并给出预留余量、指标观测与灰度回滚方法。163 收藏 -
Go 的 time.LoadLocation 在精简容器中报 unknown time zone,通常是运行环境缺少 IANA 时区数据。本文按查找顺序、镜像补齐、time/tzdata 嵌入和 ParseInLocation 验证给出处理方案。403 收藏 -
GOMEMLIMIT 是 Go runtime 的软内存上限,设置后 RSS 仍可能上涨。本文用 runtime/metrics 区分当前上限、runtime 账本、存活堆和容器 RSS,排查 cgo、mmap、GC 周期与容器余量。422 收藏