首先明确几个关键概念
-
windows 或 linux 系统分为32位 和 64位
-
go build 可以对应编译32位和64位的可执行程序产物
-
golang中的int类型,在32位系统,最大值可以到21亿,在64位系统,最大值可以是2的63次方
好的,概念了解清楚了,我们说一下坑:
如果你用一个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是个统称。
网友评论