понедельник, 4 мая 2020 г.

Четыре примера использования iota в Golang

Ключевое слово iota представляет последовательные целочисленные константы 0, 1, 2, …

  • Оно сбрасывается в 0 всякий раз, когда слово const появляется в исходном коде,
  • и увеличивается после каждой спецификации const.

const (
    C0 = iota
    C1 = iota
    C2 = iota
)
fmt.Println(C0, C1, C2) // "0 1 2"

Это может быть упрощено до

const (
    C0 = iota
    C1
    C2
)

Здесь мы полагаемся на тот факт, что выражения неявно повторяются в объявлении const в скобках - это указывает на повторение предыдущего выражения и его тип.

Начать с одного

Чтобы начать список констант с 1 вместо 0, вы можете использовать iota в арифметическом выражении.

const (
    C1 = iota + 1
    C2
    C3
)
fmt.Println(C1, C2, C3) // "1 2 3"

Пропустить значение

Вы можете использовать пустой идентификатор (символ подчеркивания, _ ), чтобы пропустить значение в списке констант.

const (
    C1 = iota + 1
    _
    C3
    C4
)
fmt.Println(C1, C3, C4) // "1 3 4"

Полный тип enum со строками

Вот идиоматический способ реализации перечислимого типа:

  • создайте новый целочисленный тип,
  • перечислите его значения, используя iota,
  • дайте типу функцию String.

type Direction int

const (
    North Direction = iota
    East
    South
    West
)

func (d Direction) String() string {
    return [...]string{"Север", "Запад", "Юг", "Восток"}[d]
}

Использование:

var d Direction = North
fmt.Print(d)
switch d {
case North:
    fmt.Println(" идет вверх.")
case South:
    fmt.Println(" идет вниз.")
default:
    fmt.Println(" остается на месте.")
}
// Вывод: Север идет вверх.

Соглашение об именовании

Согласно стандартному соглашению об именах следует использовать смешанные заглавные буквы также для констант. Например, экспортируемой константой является NorthWest, а не NORTH_WEST.


Читайте также:


Комментариев нет:

Отправить комментарий