×

uint

减法操作慎用uint型整数,让你意想不到错误

sexyspace sexyspace 发表于2022-02-17 15:41:16 浏览237 评论0

抢沙发发表评论

昨天项目上线,出现一个莫名奇妙的错误,缓存中计算库存所剩余数量,拿全部库存-已用库存,这里设置的库存为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)

问题很小,就是不容易发现