В объявлении константы предварительно объявленный идентификатор iota представляет последовательные не типизированные целочисленные константы. Его значение является индексом соответствующего ConstSpec в объявлении константы, начиная с нуля. Его можно использовать для построения набора связанных констант.
lauren: В объявлении константы предварительно объявленный идентификатор iota представляет последовательные не типизированные целочисленные константы. Его значение является индексом соответствующего ConstSpec в объявлении константы, начиная с нуля. Его можно использовать для построения набора связанных констант.
Ага, а как это правильно применяется? Скинь пример кода, для полной ясности происходящего. А то я немного не догоняю.
Ну вот для примера:
const (
c0 = iota // c0 == 0
c1 = iota // c1 == 1
c2 = iota // c2 == 2
)
const (
a = 1 << iota // a == 1 (iota == 0)
b = 1 << iota // b == 2 (iota == 1)
c = 3 // c == 3 (iota == 2, не используется)
d = 1 << iota // d == 8 (iota == 3)
)
const (
u = iota * 42 // u == 0 (не типизированная цельно-числовая (integer) константа)
v float64 = iota * 42 // v == 42.0 (float64 константа)
w = iota * 42 // w == 84 (не типизированная цельно-числовая (integer) константа)
)
const x = iota // x == 0
const y = iota // y == 0
В комментариях всё расписано.
Также по определению, многократное использование iota в одном и том же ConstSpec имеет одинаковое значение:
const (
bit0, mask0 = 1 << iota, 1<<iota - 1 // bit0 == 1, mask0 == 0 (iota == 0)
bit1, mask1 // bit1 == 2, mask1 == 1 (iota == 1)
_, _ // (iota == 2, не используется)
bit3, mask3 // bit3 == 8, mask3 == 7 (iota == 3)
)
В этом примере используется неявное повторение последнего непустого списка выражений
Ага, ну вроде всё встало на свои места, спасибо большое <3. Постоянно удивляюсь возможностям этого языка. Уж очень много задач можно решить с помощью него.
Один из лучших примеров которые я когда либо видел! Мне очень помог он и может Вам поможет
type ByteSize float64 const ( _ = iota // ignore first value by assigning to blank identifier KB ByteSize = 1 << (10 * iota) MB GB TB PB EB ZB YB )
То есть тут к примеру можно переводить из кб в мегабайт и так далее - главное расположить их правильно! То есть сверху вниз если нужно с килобайт то гигабайт и каждая итерация умножает на 10
Вот с днями неделями пример! Тут просто и понятно у Вас 1-2-3-4-5 дни недели!