Идентификатор iota
Идентификатор iota в Go представляет собой генератор последовательных
целочисленных констант, который используется внутри объявлений const.
При каждом появлении iota в блоке const его значение увеличивается
на единицу, начиная с нуля. Это позволяет удобно создавать перечисления
и наборы связанных констант без явного указания их числовых значений.
Идентификатор iota сбрасывается до нуля при начале каждого нового
блока const.
Синтаксис
const (
value1 = iota // 0
value2 = iota // 1
value3 = iota // 2
)
При объявлении нескольких констант в одном блоке, каждое последующее
использование iota увеличивает его значение на единицу.
Пример
Давайте создадим перечисление дней недели с помощью iota:
package 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)
}
Результат выполнения кода:
0 1 2 3 4 5 6
Пример
iota можно использовать для создания битовых масок, где каждая
константа представляет отдельный бит:
package main
import "fmt"
func main() {
const (
Read = 1 << iota // 1
Write = 1 << iota // 2
Execute = 1 << iota // 4
)
fmt.Println(Read, Write, Execute)
}
Результат выполнения кода:
1 2 4
Пример
В блоке const можно опускать повторяющееся выражение,
тогда последующие константы будут использовать то же выражение,
что и предыдущая:
package main
import "fmt"
func main() {
const (
a = iota * 2 // 0
b // 2
c // 4
d // 6
)
fmt.Println(a, b, c, d)
}
Результат выполнения кода:
0 2 4 6
Пример
iota сбрасывается при каждом новом блоке const,
даже если они находятся в одном объявлении:
package 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)
}
Результат выполнения кода:
0 1 0 1
Смотрите также
-
конструкцию
const,
которая объявляет константы в Go -
конструкцию
var,
которая объявляет переменные -
конструкцию
type,
которая объявляет пользовательские типы -
конструкцию
blank-identifier,
которая используется для игнорирования значений