Перейти до основного вмісту
Модуль 1 · Урок 3 із 53/50 у курсі~10 min
Модульні уроки (3/5)

Константи та йота

Константи — це незмінні значення, відомі під час компіляції. У Go вони є оголошується за допомогою const і може бути typed або untyped. Нетипові мають a суперсила: вони адаптуються до типу, який вимагає контекст, щадячи вас від необхідності писати явні перетворення.

Основний синтаксис

Go
const PI = 3.14
const MaxRetry int = 5
const Name = "eLearner"

MaxRetry введено (int): його можна призначити лише int. PI та Name є нетиповими: вони поводяться як «літерали» та адаптуються до контекст.

Go
const PI = 3.14

var f float32 = PI  // ok: PI è non tipata, diventa float32
var d float64 = PI  // ok

const блоків

Ви можете згрупувати декілька констант у блоці:

Go
const (
    StateInitial = "INIT"
    StateReady   = "READY"
    StateError   = "ERROR"
)

iota: лічильник перерахування

Усередині блоку const спеціальний ідентифікатор iota починається з 0 і збільшується на 1 у кожному рядку. Це ідіома для створення перерахувань:

Go
const (
    Monday = iota // 0
    Tuesday       // 1
    Wednesday     // 2
    Thursday      // 3
    Friday        // 4
)

Наступні рядки успадковують вираз, якщо вони його не надають. Тому достатньо написати Tuesday без повторення = iota.

Візерунки з виразами

iota може з’являтися в довільних виразах:

Go
const (
    KB = 1 << (10 * (iota + 1)) // 1 << 10 = 1024
    MB                          // 1 << 20
    GB                          // 1 << 30
    TB                          // 1 << 40
)

Пропуск значення

Якщо ви не хочете призначати значення рядку (оскільки ви хочете, щоб iota збільшити в будь-якому випадку), використовуйте порожній ідентифікатор _:

Go
const (
    _  = iota // scarta 0
    KB        // 1
    MB        // 2
)

Ваша черга

вправи#go.m1.l3.e1
Спроби: 0Завантаження…

Оголошіть постійний PI зі значенням 3.14 на рівні пакету, а потім надрукуйте його в main.

Завантаження редактора…
Показати підказку

`const PI = 3.14` йде на рівні пакету, поза основним.

Рішення доступне після 3 спроб

вправи#go.m1.l3.e2
Спроби: 0Завантаження…

Визначте блок const із днями тижня (понеділок, вівторок, середа), пронумерованими від 1 за допомогою йоти.

Завантаження редактора…
Показати підказку

Використовуйте `iota + 1` у першому рядку блоку; наступні рядки успадковують вираз.

Рішення доступне після 3 спроб

Quiz#go.m1.l3.e3
Готовий

Що друкує ця програма?

Go
const (
    A = iota * 2
    B
    C
)
fmt.Println(A, B, C)
Варіанти відповідей

Підведення підсумків

  • const для незмінних значень, відомих під час компіляції.
  • Нетипові константи адаптуються до контексту: конвертація не потрібна.
  • const ( ... ) блокує значення, пов'язані з групою.
  • iota починається з 0 у кожному блоці та збільшується рядок за рядком.
  • Шаблони: enum (= iota), бітова маска (= 1 << iota), одиниці (= 1 << (10*iota)).