昨天项目上线,出现一个莫名奇妙的错误,缓存中计算库存所剩余数量,拿全部库存-已用库存,这里设置的库存为uint32位
var a uint32 = 2
var b uint32 = 3
v := a - b
fmt.Println(v)
打印:(刚开始一脸闷逼)
4294967295
纠错好久,才想起了这是个细节问题,当a-b成负数时候,因为:=会自动把v当做uint32位,所以系统会把负数的1的正负位当做最高进制来算,造成数值很大
改为
v := int(a) - int(b)
问题很小,就是不容易发现