Ключевое слово 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.
Читайте также:
Комментариев нет:
Отправить комментарий