Go语言技术文章
-
解释 runtime/metrics 中空切片、KindBad、合法零值和空直方图的区别,并给出复用 metrics.Sample 切片的批处理写法。266 收藏 -
Golang · Go问答 | 4天前 | 标准库 · 故障排查 · Go问答 · Go 运行时指标 runtime/metrics metrics.Read metrics.Sample metrics.All KindBad
runtime/metrics.Read 不会自动创建样本,切片为空时遍历不到结果;未知指标则会得到 KindBad。本文说明如何填写完整指标名、用 metrics.All 判断支持关系、按 Value.Kind 分派,并封装一个可复用的运行时指标读取函数。198 收藏 -
Go 的 uint64 乘法只保留低 64 位,需要完整结果时应使用 math/bits.Mul64 获取 hi 和 lo。本文进一步说明如何用值类型结构体、定长切片和容量预分配处理批量乘法,减少扩容、格式化和临时对象带来的额外分配。177 收藏 -
用bits.Mul64取得uint64乘法的完整高低位,解释高位判定溢出、低位为零的含义、返回状态以及重组和类型转换的常见错误。157 收藏 -
Go 的普通 uint64 乘法只保留固定宽度结果。本文用 math/bits.Mul64 拆出 128 位乘积的高、低 64 位,给出可复用封装、溢出判断、结果格式化和边界说明。269 收藏 -
time.Ticker.Reset 会停止当前计时并按新周期重新计时,下一次 tick 要等新周期经过。本文从批处理场景拆解立即触发的常见误判,并给出只创建一个 ticker、单点重置、可停止和可审计的实现方式。184 收藏 -
解释Ticker重置后立即执行的常见原因,区分新旧通道语义、已接收通知与排队任务,并提供单协程管理周期更新、取消和错误处理的示例。323 收藏 -
time.Ticker.Reset 本身不会让下一次 tick 立即到达。本文结合 Go 1.23 的定时器通道变化,解释陈旧 tick、并发接收和任务重入造成的错觉,并给出单一 goroutine 管理 ticker 的最小示例。329 收藏 -
解释 Go archive/tar 长文件名看似被截断的原因,给出显式使用 PAX、正确读取 Header.Name,以及批处理复用缓冲区减少额外分配的写法。413 收藏 -
archive/tar 写入长文件名后出现截断或读取结果不符合预期,通常不是字符串被 Go 随机改写,而是归档格式能力、Header.Format、Header.Size、Close 生命周期和解包端兼容性没有对齐。本文比较 USTAR、PAX、GNU,并给出可复用的 PAX 写入与读取示例。328 收藏 -
Go archive/tar 写入长文件名时,优先显式指定 FormatPAX,并让 Reader.Next 读取扩展头合并后的完整 Header.Name。本文给出可复用最小示例,并说明仍然截断时应检查 USTAR、手动解析和下游解包器。273 收藏 -
说明Go Glob空结果、路径转义与层级匹配的常见原因,给出同目录多模式共享枚举、结果切片复用和分批回调示例,并解释排序及内存边界。247 收藏 -
filepath.Glob 返回空结果不一定是错误,常见原因是相对路径依赖当前工作目录、* 不跨目录分隔符,以及路径转义和平台规则不一致。本文用可复用代码区分空匹配、ErrBadPattern 和路径构造问题。240 收藏 -
filepath.Glob 匹配不到文件时,问题通常不在通配符本身,而在相对路径基准、目录层级、操作系统分隔符或实际没有匹配项。本文用一个可复用的最小示例区分根目录缺失、ErrBadPattern 和空结果,并说明 Glob 的适用边界。255 收藏 -
os.File.Sync 成功只覆盖当前文件内容提交到 stable storage 的边界,不等于用户态缓冲、目录项和业务 checkpoint 一起持久化。本文用可复用缓冲区、明确 Flush/Sync 顺序和临时文件替换边界说明批处理如何减少额外分配并降低重启后的丢数风险。135 收藏