/images/avatar.webp

五岁博客

golang float 浮点数运算失真解决方案(使用第三方 decimal 包可解决)

用Golang 做金额计算或高精度数值运算时,很多开发者都会踩过 float 浮点数的“坑”。

比如执行 0.1 + 0.2,得到的结果不是预期的 0.3,而是 0.30000000000000004

这种运算失真在支付、财务等场景中可能引发严重问题,今天就聊聊失真的根源,以及用第三方 decimal 包解决问题的完整方案。

golang 获取调用者的方法名及所在源码行数

一、为什么需要获取调用者信息?

可能有人会问:“直接看代码行数不就行了,为什么要动态获取?” 其实在实际开发中,调用者信息的动态获取有很多关键场景:

  • 日志定位:在通用日志工具中打印调用者方法名和行数,比如封装一个 LogInfo 函数,无论在哪个方法中调用,都能自动标注来源,调试时不用再逐行找日志位置;

go 如何打印错误时代码堆栈信息(使用库 pkg error 包)

背景

刚接手Go项目时,遇到过一次生产环境报错——日志只打印“查询用户失败”,没有任何调用链路信息。

翻了半天代码才定位到是数据库查询的子函数抛错。

打印错误 error 日志时,仅有错误信息,没有错误代码的堆栈信息,这在问题排查上比较困难,具体代码如下