Уроки модуля (3/5)
Константы и йота
Константы — это неизменяемые значения, известные во время компиляции. В Го они есть
объявлен с помощью const и может быть типизированным или нетипизированным. Нетипизированные имеют
суперсила: они адаптируются к типу, требуемому контекстом, щадя вас
от необходимости писать явные преобразования.
Основной синтаксис
const PI = 3.14
const MaxRetry int = 5
const Name = "eLearner"Тип MaxRetry (int): его можно назначить только int.
PI и Name нетипизированы: они ведут себя как «литералы» и адаптируются к
контекст.
const PI = 3.14
var f float32 = PI // ok: PI è non tipata, diventa float32
var d float64 = PI // okconst блоков
В блок можно сгруппировать несколько констант:
const (
StateInitial = "INIT"
StateReady = "READY"
StateError = "ERROR"
)iota: счетчик перечисления
Внутри блока const специальный идентификатор iota начинается с 0.
и увеличивается на 1 в каждой строке. Это идиома для перечислений:
const (
Monday = iota // 0
Tuesday // 1
Wednesday // 2
Thursday // 3
Friday // 4
)Последующие строки наследуют выражение, если они его не предоставляют.
Поэтому достаточно написать Tuesday, не повторяя = iota.
Шаблоны с выражениями
iota может появляться внутри произвольных выражений:
const (
KB = 1 << (10 * (iota + 1)) // 1 << 10 = 1024
MB // 1 << 20
GB // 1 << 30
TB // 1 << 40
)Пропуск значения
Если вы не хотите присваивать значение строке (поскольку вы хотите, чтобы iota
в любом случае увеличить), используйте пустой идентификатор _:
const (
_ = iota // scarta 0
KB // 1
MB // 2
)Ваша очередь
Объявите константу PI со значением 3,14 на уровне пакета, а затем распечатайте ее внутри main.
Показать подсказку
`const PI = 3.14` идет на уровне пакета, вне основного.
Решение доступно после 3 попыток
Определите константный блок с днями недели (понедельник, вторник, среда), пронумерованными с 1, используя йоту.
Показать подсказку
Используйте `iota + 1` в первой строке блока; последующие строки наследуют выражение.
Решение доступно после 3 попыток
Что печатает эта программа?
const (
A = iota * 2
B
C
)
fmt.Println(A, B, C)Резюме
constдля неизменяемых значений, известных во время компиляции.- Нетипизированные константы адаптируются к контексту: преобразование не требуется.
const ( ... )блокирует значения, связанные с группой.iotaначинается с 0 в каждом блоке и увеличивается построчно.- Шаблоны: перечисление (
= iota), битовая маска (= 1 << iota), единицы измерения (= 1 << (10*iota)).