Какие значения получают константы от iota в этих двух блоках const?
Прочитайте два блока const ниже. Первый использует голый iota с пропущенной строкой _; второй — выражение сдвига 1 << (10 * (iota + 1)).
Определите значение каждой именованной константы: A, B, D, KB, MB.
const (
A = iota
B
_
D
)
const (
KB = 1 << (10 * (iota + 1))
MB
)
Определите вывод.
A=0, B=1, D=3 — iota начинается с 0 в каждом блоке const и растёт на единицу с каждой строкой, включая пропущенную строку _ (она занимает значение 2). Во втором блоке KB = 1 << (10 * (iota + 1)) даёт KB=1024 и MB=1048576, потому что iota равен 0, затем 1 на следующих строках.
- ✗Думать, что пропущенная строка
_не продвигаетiota— она всё равно занимает значение - ✗Считать
iotaглобальным счётчиком, а не сбрасываемым в каждом блокеconst - ✗Забывать, что
iotaвычисляется внутри полного выражения строки, например1 << (10*(iota+1))
- →Как определить
KB, MB, GBкак степени двойки одним выражением сiota? - →Что произойдёт с
iota, если две константы делят одну строку черезA, B = iota, iota?
Какие значения у констант?
const (
A = iota // ?
B // ?
_ // пропуск
D // ?
)
const (
KB = 1 << (10 * (iota + 1)) // ?
MB // ?
)
Значения
A=0 B=1 D=3
KB=1024 MB=1048576
Как считает iota
iota — это счётчик строк внутри блока const. Он сбрасывается в 0 в начале каждого блока и увеличивается на единицу с каждой строкой-спецификацией, даже если строка — пустой _ или повторяет предыдущее выражение.
Первый блок:
A = iota→ строка 0 →0B(повторяет= iota) → строка 1 →1_→ строка 2 → значение2отброшеноD→ строка 3 →3
Второй блок начинает iota заново с 0. Выражение 1 << (10 * (iota + 1)) вычисляется на каждой строке:
KB→iota=0→1 << 10=1024MB→iota=1→1 << 20=1048576
⚠️ Пропущенная _ занимает номер — забыть это значит сместить все последующие значения.