美文网首页
【避坑指南】golang中使用int类型导致数据溢出

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

作者: 文沐2023 | 来源:发表于2021-12-15 13:26 被阅读0次

首先明确几个关键概念

  • windows 或 linux 系统分为32位 和 64位

  • go build 可以对应编译32位和64位的可执行程序产物

  • golang中的int类型,在32位系统,最大值可以到21亿,在64位系统,最大值可以是2的63次方

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是个统称。

相关文章

网友评论

      本文标题:【避坑指南】golang中使用int类型导致数据溢出

      本文链接:https://www.haomeiwen.com/subject/ymxpfrtx.html