Numeric Types
…
byte alias for uint8 rune alias for int32
…
To avoid portability issues all numeric types are defined types and thus distinct except
byte
, which is an alias foruint8
, andrune
, which is an alias forint32
.
As with other aliases in Go, this means that the same type simply has two (or perhaps more) identifiers, which are completely interchangeable.
This means that byte
is not a distinct type, simply backed by a uint8
type. It is the same type, with just a different identifier. This means that, for example, anywhere in Go code you see byte
you could instead type uint8
, or vice versa.
This is distinct from the case mentioned yesterday between int
vs int32
/int64
, which may have the same underlying data structure, but are still distinct types.
So how can you tell which size your int
is while running your program? Well, first, if you’re trying to determine this at runtime, first consider whether that’s really necessary. 😊 Can you design your program not to require that? But if you really must know, the unsafe.Sizeof
function has your back. It will report the number of bytes used by a the argument’s zero value.
fmt.Println(unsafe.Sizeof(int(0))) // 8 on a 64-bit system, 4 on a 32-bit system
Quotes from The Go Programming Language Specification, Version of January 19, 2023