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
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.