Идентификатор iota

Идентификатор iota в Go представляет собой генератор последовательных целочисленных констант, который используется внутри объявлений const. При каждом появлении iota в блоке const его значение увеличивается на единицу, начиная с нуля. Это позволяет удобно создавать перечисления и наборы связанных констант без явного указания их числовых значений. Идентификатор iota сбрасывается до нуля при начале каждого нового блока const.

Синтаксис

goconst (
  value1 = iota // 0
  value2 = iota // 1
  value3 = iota // 2
)

При объявлении нескольких констант в одном блоке, каждое последующее использование iota увеличивает его значение на единицу.

Пример

Давайте создадим перечисление дней недели с помощью iota:

gopackage main

import "fmt"

func main() {
  const (
    Monday = iota // 0
    Tuesday = iota // 1
    Wednesday = iota // 2
    Thursday = iota // 3
    Friday = iota // 4
    Saturday = iota // 5
    Sunday = iota // 6
  )

  fmt.Println(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)
}

Результат выполнения кода:

go0 1 2 3 4 5 6

Пример

iota можно использовать для создания битовых масок, где каждая константа представляет отдельный бит:

gopackage main

import "fmt"

func main() {
  const (
    Read = 1 << iota // 1
    Write = 1 << iota // 2
    Execute = 1 << iota // 4
  )

  fmt.Println(Read, Write, Execute)
}

Результат выполнения кода:

go1 2 4

Пример

В блоке const можно опускать повторяющееся выражение, тогда последующие константы будут использовать то же выражение, что и предыдущая:

gopackage main

import "fmt"

func main() {
  const (
    a = iota * 2 // 0
    b // 2
    c // 4
    d // 6
  )

  fmt.Println(a, b, c, d)
}

Результат выполнения кода:

go0 2 4 6

Пример

iota сбрасывается при каждом новом блоке const, даже если они находятся в одном объявлении:

gopackage main

import "fmt"

func main() {
  const (
    First = iota // 0
    Second = iota // 1
  )

  const (
    Third = iota // 0
    Fourth = iota // 1
  )

  fmt.Println(First, Second, Third, Fourth)
}

Результат выполнения кода:

go0 1 0 1

Смотрите также

  • конструкцию const,
    которая объявляет константы в Go
  • конструкцию var,
    которая объявляет переменные
  • конструкцию type,
    которая объявляет пользовательские типы
  • конструкцию blank-identifier,
    которая используется для игнорирования значений