Go gotcha: Numbers that start with zero
What’s going on with the counting in this example?
const (
Century = 100
Decade = 010
Year = 001
)
// The world's oldest person, Emma Morano, lived for a century,
// two decades and two years.
fmt.Println("She was", Century+2*Decade+2*Year, "years old.")
She was 118 years old.
Answer
010
is a number in base 8, therefore it means 8, not 10.
Integer literals in Go are specified in octal, decimal or hexadecimal.
The number 16 can be written as 020
, 16
or 0x10
.
Literal  Base  Note 

020 
8  Starts with 0

16 
10  Never starts with 0 * 
0x10 
16  Starts with 0x

* 0
is an octal literal in Go.
An integer literal is a sequence of digits representing an integer constant. An optional prefix sets a nondecimal base: 0 for octal, 0x or 0X for hexadecimal.
The Go Programming Language Specification: Integer literals
Comments