Go: Enumeration (enum) with string representation

A group of constants enumerated with iota might do the job:

const (
        Sunday    int = iota // Sunday == 0
        Monday               // Monday == 1
        Tuesday              // Tuesday == 2
        Wednesday            // …
        Thursday
        Friday
        Saturday
)

iota represents successive integer constants 0, 1, 2,…; it resets to 0 whenever the word const appears in the source code and increments after each const specification.

Above, we also rely on the fact that expressions are implicitly repeated in a parenthesized const declaration—this indicates a repetition of the preceding expression and its type.

You could also introduce a new type…

type Suite int

const (
        Spades Suite = iota
        Hearts
        Diamonds
        Clubs
)

…and give it a String function:

func (s Suite) String() string {
        return [...]string{"Spades", "Hearts", "Diamonds", "Clubs"}[s]
}

Here is the new type in action:

var s Suite = Hearts
fmt.Print(s)
switch s {
case Spades:
        fmt.Println(" are best.")
case Hearts:
        fmt.Println(" are second best.")
default:
        fmt.Println(" aren't very good.")
}
Hearts are second best.

Comments

Be the first to comment!