【避坑指南】golang中使用int类型导致数据溢出

2021-12-15  本文已影响0人  文沐2023

首先明确几个关键概念

image.png

好的,概念了解清楚了,我们说一下坑:

如果你用一个int型的变量存储一个大于21亿(大约)的数字,那么在不同的编译环境下,结论就是不同的了。

var num int
num = 2147483647
fmt.Println(num, num+1)

//32位系统
输出结果:2147483647 -2147483648

//64位系统
输出结果:2147483647 2147483648

总结一下:

如果你的变量类型为int,用在统计结果中,在32位环境下,变量值超过21亿(大约)出现负值。所以明确数据类型可以有效避免不确定因素导致的坑

命令集合

//查看系统位数
uname -a

//查看golang可执行程序位数,主要看GOARCH参数
go env  | grep GOARCH 

扩展知识 (摘自https://jingyan.baidu.com/article/64d05a02143ea1de55f73b86.html)

了解"64"这个字眼的含义?
指出CPU, 系统, 包等是64位。AMD64又称"x86_64"或"x64"。x86_64就是64位的系统, 这里的x代表不确定, 可以是3、4、5、6, 分别对应386, 486, 586, 686, 也就是说x86_64是个统称, 如果是i686_64也是属于x86_64这个统称的。

了解"32"这个字眼的含义?
指出CPU, 系统, 包等是32位。 一般写x86的就是32位。这里的x代表不确定, 可以是3、4、5、6, 分别对应386, 486, 586, 686, 也就是说x86是个统称。

上一篇下一篇

猜你喜欢

热点阅读