Go语言技术文章
-
Go runtime/metrics 采样太频繁时,先区分 Read、快照处理和导出成本,再通过复用 Sample、筛选指标和异步批量上报降低开销。354 收藏 -
用 math/rand/v2 写随机测试时,把 PCG 的两组 seed 作为测试输入保存,并为每个并发用例创建独立随机源;失败时输出 seed,下一次就能重放同一组随机序列。159 收藏 -
Go runtime/metrics 读不到自定义名称时,先检查 runtime.Version() 和 metrics.All(),确认完整指标名、单位与版本支持集合,再把业务自定义指标交给独立采集层。404 收藏 -
Go math/rand/v2 的顶层函数虽可并发调用,但任务需要独立状态时应为每个任务创建自己的 Rand。本文用 NewPCG、稳定种子和复现检查拆开并发安全、独立性与密码学安全边界。119 收藏 -
Go pprof 里的 CPU、mutex 和 block profile 关注的不是同一件事。本文用一个采集窗口说明三者的开关、命令、栈位置和适用边界,帮助你判断到底是 CPU 忙还是 goroutine 在等锁、等通道。250 收藏 -
Go big.Float 比较结果不稳定,通常是精度、舍入模式或类型转换顺序不一致。本文用 Int、Rat 和 Float 的边界示例,说明如何设置二进制精度、检查 Acc,并用 Cmp 完成可靠比较。295 收藏 -
Go 的 block profile 记录的是同步原语上的阻塞时间,不只包含 Mutex。本文教你从等待栈区分 Mutex、RWMutex、WaitGroup 和 channel,并用 mutex profile 找到真正持锁的代码。378 收藏 -
Go big.Rat 转小数时,先保留精确有理数,再用 FloatString 指定小数位;不要提前转 float64。本文说明 FloatString、FloatPrec 和 big.Float 的精度边界,以及金额、比例等场景的选择。266 收藏 -
Go mutex profile 没有热点时,先用 runtime.SetMutexProfileFraction(-1) 读取开关,再确认采样比例、竞争窗口和 pprof 进程;本文还区分 mutex profile 与 block profile 的排查边界。151 收藏 -
Go 订单金额超过 int64 时,按最小货币单位使用 big.Int,比例计算使用 big.Rat,并守住 JSON 与数据库边界。124 收藏 -
Go 基准测试开启内存分配报告后,结果变化不一定代表业务代码变慢。本文从计时边界、b.ReportAllocs、B/op、allocs/op 和重复运行入手,区分真实分配与测量噪声。384 收藏 -
Go 模板选型的关键不在 API 是否相似,而在最终输出是否会被浏览器解析。本文用同一份数据说明 html/template 的上下文自动转义、text/template 的纯文本边界,以及可信 HTML 片段的使用条件。112 收藏 -
Go 的 testing.AllocsPerRun 数值变化大时,先排查初始化、输入状态复用、并行测试和后台分配,再决定增加 runs 还是改用 benchmark。本文按测量边界、稳定输入和指标分工给出一套可执行的检查顺序。223 收藏 -
Go 的 html/template 会按输出上下文自动转义。本文解释为什么不能直接拼 HTML 字符串,以及如何划分普通文本、可信片段和回归检查边界。388 收藏 -
Go benchmark 结果忽高忽低,常见原因不是被测函数本身,而是初始化落在计时区间、分配统计未分开或运行噪声未被重复确认。本文用 testing.B 说明 StopTimer、ResetTimer、ReportAllocs 和 -count 的配合方式。368 收藏