Модульні уроки (3/5)
Константи та йота
Константи — це незмінні значення, відомі під час компіляції. У Go вони є
оголошується за допомогою const і може бути typed або untyped. Нетипові мають a
суперсила: вони адаптуються до типу, який вимагає контекст, щадячи вас
від необхідності писати явні перетворення.
Основний синтаксис
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 спроб
Визначте блок const із днями тижня (понеділок, вівторок, середа), пронумерованими від 1 за допомогою йоти.
Показати підказку
Використовуйте `iota + 1` у першому рядку блоку; наступні рядки успадковують вираз.
Рішення доступне після 3 спроб
Що друкує ця програма?
const (
A = iota * 2
B
C
)
fmt.Println(A, B, C)Підведення підсумків
constдля незмінних значень, відомих під час компіляції.- Нетипові константи адаптуються до контексту: конвертація не потрібна.
const ( ... )блокує значення, пов'язані з групою.iotaпочинається з 0 у кожному блоці та збільшується рядок за рядком.- Шаблони: enum (
= iota), бітова маска (= 1 << iota), одиниці (= 1 << (10*iota)).