# What is an idiomatic way of representing enums in Go?

Quoting from the language specs:Iota

Within a constant declaration, the predeclared identifier iota represents successive untyped integer constants. It is reset to 0 whenever the reserved word const appears in the source and increments after each ConstSpec. It can be used to construct a set of related constants:

```const (  // iota is reset to 0
c0 = iota  // c0 == 0
c1 = iota  // c1 == 1
c2 = iota  // c2 == 2
)

const (
a = 1 << iota  // a == 1 (iota has been reset)
b = 1 << iota  // b == 2
c = 1 << iota  // c == 4
)

const (
u         = iota * 42  // u == 0     (untyped integer constant)
v float64 = iota * 42  // v == 42.0  (float64 constant)
w         = iota * 42  // w == 84    (untyped integer constant)
)

const x = iota  // x == 0 (iota has been reset)
const y = iota  // y == 0 (iota has been reset)
```

Within an ExpressionList, the value of each iota is the same because it is only incremented after each ConstSpec:

```const (
bit0, mask0 = 1 << iota, 1<<iota - 1  // bit0 == 1, mask0 == 0
_, _                                  // skips iota == 2
)
```

This last example exploits the implicit repetition of the last non-empty expression list.

So your code might be like

```const (
A = iota
C
T
G
)
```

or

```type Base int

const (
A Base = iota
C
T
G
)
```

if you want bases to be a separate type from int.