Go int什么时候是64位?

Go int什么时候是64位?,go,Go,根据报告: int是大小至少为32位的有符号整数类型。但是,它是一种独特的类型,而不是int32的别名 但它并没有说哪个平台或什么时候会比int32更大 有人能给我更多的细节吗?或者处理它的源代码在哪里?我可以强制编译器生成int 64位吗 我知道我可以使用int64。这不是一个要求最佳实践的问题。int的大小可能是由实现定义的,这意味着它将根据操作系统和内核架构的不同而因平台而异。大多数编程语言(例如C语言)都是这样 如果必须有一个精确的64位整数,那么,int64类型存在,这将保证整数中有精

根据报告:

int是大小至少为32位的有符号整数类型。但是,它是一种独特的类型,而不是int32的别名

但它并没有说哪个平台或什么时候会比int32更大

有人能给我更多的细节吗?或者处理它的源代码在哪里?我可以强制编译器生成int 64位吗


我知道我可以使用int64。这不是一个要求最佳实践的问题。

int的大小可能是由实现定义的,这意味着它将根据操作系统和内核架构的不同而因平台而异。大多数编程语言(例如C语言)都是这样

如果必须有一个精确的64位整数,那么,
int64
类型存在,这将保证整数中有精确的64位。与
int32
int16
等相同。否则,文档建议使用
int
,因为编译器可以更轻松地优化代码

还有一组带有 具体实施规模:

uint     either 32 or 64 bits
int      same size as uint

int
的大小取决于编译器编写器。对于主机来说,它通常是一个自然、高效的大小。例如,amd64上的64位和386体系结构上的32位


比如说,

package main

import (
    "fmt"
    "runtime"
    "strconv"
)

func main() {
    fmt.Println(runtime.GOARCH, strconv.IntSize)
}
输出:

$ uname -p
x86_64
$ go run intsize.go
amd64 64
$ 
amd64p32 32

游乐场:

输出:

$ uname -p
x86_64
$ go run intsize.go
amd64 64
$ 
amd64p32 32


Go从C继承了这个

int
一个整数,通常反映整数的自然大小 主机


这些信息告诉您,它可以在32位int的范围内存储int,但是如果这样做有性能优势的话,它的大小可以大于32位。即使它大于32位,也不能期望它代表更大的数值范围。我知道我可以使用int64。我只是好奇edge的案子。他们缺少这方面的医生。我只想至少有一个真实的例子,当它将大于int32。这不是一个要求最佳实践的问题。文档非常清楚,它是由实现定义的——找出实际示例的最佳方法是在各种不同的环境中实际运行一系列测试(类似于)。@YadSmood没有边缘案例
int
是平台最方便的整数大小。在32位机器上,它通常是32位,在64位机器上是64位。在计算东西时,您应该使用它,并且不需要超过2^32,但也不要求它正好是32位(不依赖位表示、溢出/包装等)。这使编译器可以选择最有效的方法。