什么时候int是64位?

According to the doc:

int is a signed integer type that is at least 32 bits in size. It is a distinct type, however, and not an alias for, say, int32.

But it doesn't say which platform or when it will be larger than int32.

Can anyone give me more details about it? Or where is the source code to handle it? Can I force the compiler to make int 64 bits?

I know I can use int64. This is not a question asking for best practice.

The Go Programming Language Specification

Numeric types

There is also a set of predeclared numeric types with implementation-specific sizes:

uint     either 32 or 64 bits
int      same size as uint

The size of int depends on the compiler writer. It's typically a natural, efficient size for the host machine. For example, 64 bits on amd64 and 32 bits on 386 architectures.


For example,

package main

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

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

Output:

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

Playground: https://play.golang.org/p/wyNm2Hyzl6W

Output:

amd64p32 32

The Go Blog: Inside the Go Playground


Go inherited this from C.

The C Programming Language, 2nd Edition, Brian W. Kernighan and Dennis Ritchie

int an integer, typically reflecting the natural size of integers on the host machine

The size of an int is implementation-defined, presumably, meaning it would vary from platform to platform depending on the operating system and kernel architecture. This is the case in most programming languages (C, for example).

If you must have a 64-bit integer exactly, then, well, the int64 type exists, which will guarantee that there are exactly 64 bits in your integer. Same with int32, int16, etc. Otherwise, the documentation recommends using int, as the compiler can then optimize the code more easily.