Go provides several predeclared numeric types. Most of them have a fixed size, regardless of the architecture the program is compiled for or running on.
Numeric Types
An integer, floating-point, or complex type represents the set of integer, floating-point, or complex values, respectively. They are collectively called numeric types. The predeclared architecture-independent numeric types are:
uint8 the set of all unsigned 8-bit integers (0 to 255) uint16 the set of all unsigned 16-bit integers (0 to 65535) uint32 the set of all unsigned 32-bit integers (0 to 4294967295) uint64 the set of all unsigned 64-bit integers (0 to 18446744073709551615) int8 the set of all signed 8-bit integers (-128 to 127) int16 the set of all signed 16-bit integers (-32768 to 32767) int32 the set of all signed 32-bit integers (-2147483648 to 2147483647) int64 the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807) float32 the set of all IEEE-754 32-bit floating-point numbers float64 the set of all IEEE-754 64-bit floating-point numbers complex64 the set of all complex numbers with float32 real and imaginary parts complex128 the set of all complex numbers with float64 real and imaginary parts byte alias for uint8 rune alias for int32
The value of an n-bit integer is n bits wide and represented using two’s complement arithmetic.
This gives us a ton of flexibility, built right into the language. Sometimes you need even larger numbers, though, and then the standard library’s math/big package can help.
If you’re dealing with currencies, you may be tempted to use float64
or even float32
, but please don’t! IEEE-754 floating point numbers are not precise. And not just for really big or really small numbers. You will introduce bugs into your software by using floating point values for currency addition or other math. Instead, either use an integer type, and treat the right most digits as decimal places (usually 2 decimal places, but it depends on your currency), or use a library specifically intended for handling currency math (I don’t actually know of a good one, or I’d link to it here).
More on byte
and rune
later this week.
Quotes from The Go Programming Language Specification, Version of January 19, 2023