Назад к урокам

iota в Go

Урок объясняет работу специального идентификатора iota в Go, его роль в создании перечислений, автоматической генерации последовательных значений, пропуске элементов и построении удобных enum-паттернов.

Начинающий8 min

🔢 iota в Go

iota - это специальный идентификатор в Go, который упрощает создание наборов связанных констант. Его часто используют для реализации перечислений (enums), автоматической генерации последовательных значений и удобного управления набором фиксированных констант.


📌 Что такое iota?

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
)

🧩 Реализация перечислений (enum pattern)

С помощью 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 и т.п.
  • Идеально подходит для создания перечислений (enums).
  • Упрощает работу с наборами констант и делает код чище.