我用来测试某些预期行为的应用程序的一小部分给出了不同的输出,具体取决于我运行它的处理器。这是代码的相关部分:
for b := 0; b < intCounter; b++ {
//int64Random = rand.Int63()
int64Random = int64(rand.Int())
//CHECKING FOR SANITY
fmt.Println("int64Random is " + strconv.FormatInt(int64Random, 10))
slcTestNums = append(slcTestNums, int64Random)
}
当我在我的 Mac(amd64,darwin)上运行它时,我得到如下输出:
int64Random is 2991558990735723489
int64Random is 7893058381743103687
int64Random is 7672635040537837613
int64Random is 1557718564618710869
int64Random is 2107352926413218802
当我在 Pi(arm,linux)上运行它时,我得到如下输出:
int64Random is 1251459732
int64Random is 1316852782
int64Random is 971786136
int64Random is 1359359453
int64Random is 729066469
如果在 Pi 上我将 int64Random 更改为 = rand.Int63() 并重新编译,我会得到如下输出:
int64Random is 7160249008355881289
int64Random is 7184347289772016444
int64Random is 9201664581141930074
int64Random is 917219239600463359
int64Random is 6015348270214295654
...这更接近 Mac 所得到的。这是因为处理器架构在运行时发生了变化吗?为什么int64(rand.Int())生成 int64 范围的数字而不是保留一个 int 范围的数字,而是更改它所存储的变量的类型?我是否错过了提到这种行为的 Go 文档?
相关分类