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

dongzaidong · · 1564 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:dongzaidong

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

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1564 次点击  
加入收藏 微博
1 回复  |  直到 2020-09-18 16:31:11
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传