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 non-decimal base: 0 for octal, 0x or 0X for hexadecimal. The Go Programming Language Specification: Integer literals

Comments

Be the first to comment!