how.wtf

Enums in Golang

· Thomas Taylor

GO does not natively support an enum keyword; however, an enum-like syntax can be implemented using the help of iota.

What is iota?

iota is an identifier that auto increments constants.

In the following code, the constant number is manually incremented:

1const (
2    ZERO = 0
3    ONE = 1
4    TWO = 2
5)

however, it can be simplified to:

1const (
2	ZERO = iota // 0
3	ONE         // 1
4	TWO         // 2
5)

If desired, the iota keyword can be used on each line:

1const (
2	ZERO = iota // 0
3	ONE  = iota // 1
4	TWO  = iota // 2
5)

If a const keyword is used again, the iota will reset to 0.

 1const (
 2	ZERO = iota // 0
 3	ONE         // 1
 4	TWO         // 2
 5)
 6
 7const (
 8	ZEROAGAIN = iota // 0
 9	ONEAGAIN         // 1
10	TWOAGAIN         // 2
11)

Implementing an enum in GO

Using a combination of iota, int and const, the concept of an enum can be applied.

 1package main
 2
 3import "fmt"
 4
 5type PizzaSize int
 6
 7const (
 8	SMALL  PizzaSize = iota + 1 // 1
 9	MEDIUM                      // 2
10	LARGE                       // 3
11)
12
13func (s PizzaSize) String() string {
14	return [...]string{"Small", "Medium", "Large"}[s-1]
15}
16
17func (s PizzaSize) Index() int {
18	return int(s)
19}
20
21func main() {
22	size := SMALL
23	fmt.Println(size)          // Print : Small
24	fmt.Println(size.String()) // Print : Small
25	fmt.Println(size.Index())  // Print : 1
26}

#go  

Reply to this post by email ↪