Golang iota

Пользователь

Ребят, что такое Iota в Go, для чего это нужно и что это вообще такое? Для меня йота – это мобильный оператор))). Шучу конечно, просто очень забавное сходство названий.

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket
12 июня 2020 г., 12:10

Пользователь

В объявлении константы предварительно объявленный идентификатор iota представляет последовательные не типизированные целочисленные константы. Его значение является индексом соответствующего ConstSpec в объявлении константы, начиная с нуля. Его можно использовать для построения набора связанных констант.

12 июня 2020 г., 12:17

Пользователь

lauren: В объявлении константы предварительно объявленный идентификатор iota представляет последовательные не типизированные целочисленные константы. Его значение является индексом соответствующего ConstSpec в объявлении константы, начиная с нуля. Его можно использовать для построения набора связанных констант.

Ага, а как это правильно применяется? Скинь пример кода, для полной ясности происходящего. А то я немного не догоняю.

12 июня 2020 г., 12:25

Пользователь

Ну вот для примера:

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

В комментариях всё расписано.

12 июня 2020 г., 12:30

Пользователь

Также по определению, многократное использование 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)

)

В этом примере используется неявное повторение последнего непустого списка выражений

12 июня 2020 г., 12:35

Пользователь

Ага, ну вроде всё встало на свои места, спасибо большое <3. Постоянно удивляюсь возможностям этого языка. Уж очень много задач можно решить с помощью него.

12 июня 2020 г., 12:41

Пользователь

Один из лучших примеров которые я когда либо видел! Мне очень помог он и может Вам поможет


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 дни недели!

13 июня 2020 г., 0:22