Go: Untyped numeric constants with no limits
Constants may be typed or untyped.
const a uint = 17 const b = 55
An untyped constant has no limits. When it's used in a context that requires a type, a type will be inferred and a limit applied.
// Too big for an int const big = 10000000000 // Still ok: "untyped = untyped * untyped" const bigger = big * 100 // No problem: Result fits in an int var i int = big / 100 // Compile time error: "constant 10000000000 overflows int" var j int = big
The inferred type is determined by the syntax of the value.
123 for instance gets type
123.4 becomes a
float64. The other possibilities are
rune (alias for
Go does not have enumerated types. Instead, you can use the special name
iota in a single
const declaration to get a series of increasing values. When an initialization expression is omitted for a
const, it reuses the preceding expression.
const ( red = iota // red == 0 blue // blue == 1 green // green == 2 )
The article Define an enumeration (enum) with a string representation has a detailed example.