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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。