Урок объясняет работу специального идентификатора iota в Go, его роль в создании перечислений, автоматической генерации последовательных значений, пропуске элементов и построении удобных enum-паттернов.
iota - это специальный идентификатор в Go, который упрощает создание
наборов связанных констант. Его часто используют для реализации
перечислений (enums), автоматической генерации последовательных значений
и удобного управления набором фиксированных констант.
iota - это счётчик, который автоматически увеличивается внутри блока
const.
Каждый новый блок const начинает iota с 0, и с каждой строкой
внутри блока значение увеличивается на 1.
const (
A = iota // 0
B // 1
C // 2
)
Если последующие строки не имеют выражения - используется выражение предыдущей строки.
С помощью _ можно пропускать ненужные значения:
const (
S0 = iota // 0
_ // 1 (пропуск)
_ // 2 (пропуск)
S3 // 3
S4 // 4
)
Можно начинать с другого числа:
const (
I3 = iota + 3 // 3
I4 // 4
I5 // 5
)
С помощью iota удобно создавать перечисления:
type Direction byte
const (
North Direction = iota
East
South
West
)
Теперь каждая константа имеет своё числовое значение: 0, 1, 2, 3.
Можно добавить метод для удобства:
func (d Direction) String() string {
switch d {
case North:
return "North"
case East:
return "East"
case South:
return "South"
case West:
return "West"
default:
return "other direction"
}
}
Или более компактно:
func (d Direction) String() string {
return []string{"North", "East", "South", "West"}[d]
}
iota генерирует последовательные числовые значения.const._.iota + 5, iota * 2 и т.п.