Go语言技术文章
-
Go 解析带时区字符串时,布局要使用 -07:00 或 -0700 这样的数值偏移格式。本文说明 time.Parse 如何保留原始偏移、没有时区时为什么会按 UTC 处理,以及什么时候应该用 ParseInLocation 加载业务时区。226 收藏 -
runtime/metrics 适合读取 Go 运行时定义的指标,expvar 适合发布应用自己维护的公开变量。本文用采样、名称兼容和版本边界说明两者怎么选。357 收藏 -
Go 里不要只按“随机数”三个字选包:模拟、洗牌和可复现实验用 math/rand/v2,令牌、密钥和验证码用 crypto/rand。本文把并发安全、独立源与测试注入边界放在同一张决策表里。203 收藏 -
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 收藏