GO_INTERVIEW_LIB Telegram 536
💬 Перечислите кейсы применения iota в Go.

🔸 iota и enums

Мы часто определяем константы в Go для создания списка возможных значений, которые что-то может принимать (это иногда называют enum).

const (
Planet = 0
Star = 1
Comet = 2
Galaxy = 3
// и так далее
)


Конкретные числа 0, 1, 2... здесь не имеют значения. Это просто произвольные значения, с которыми можно сравнивать объекты:

if object.Kind == Planet {
// это планета!
}


🔸 Использование iota с const

Однако поддерживать длинный список таких чисел вручную сложно. Вот где приходит на помощь iota. Это своего рода магическое, постоянно увеличивающееся значение, которое мы можем использовать для присвоения произвольных чисел константам:

const (
Planet = iota // 0
Star // 1
Comet // 2
Galaxy // 3
// ...
)


Мы фактически присваиваем iota каждой константе в списке, но Go позволяет опустить запись = iota после первой константы.

🔸 Начало iota с 1

Также мы можем использовать iota в более сложных выражениях. Например, если мы хотим, чтобы значения начинались с 1, а не с 0:

const (
January = iota + 1
February
March
// ...
)


Здесь значение для January будет 1, для February — 2 и так далее.

🔸 iota игнорирует комментарии

Кстати, можно добавлять комментарии или пустые строки в блок констант, и это не повлияет на значения iota:

const (
Electron = iota // 0
Neutron // 1
Proton // 2
Photon // 3
Gluon // 4
)


🔸 iota, флаги и битовые маски

Ещё одно распространённое применение iota — создание значений для битовых масок. Битовая маска — это способ сравнить число с бинарным значением, чтобы проверить, установлен ли конкретный бит в 1 или 0. Когда используются конкретные битовые значения, их иногда называют флагами, а число, содержащее их, — битовым полем.

Например:

const (
Bit0 = 1 << iota // 1
Bit1 // 2
Bit2 // 4
// ...
)


Оператор << сдвигает биты числа влево на указанное количество позиций. Так как iota увеличивается на единицу для каждой последующей константы, коэффициент сдвига тоже увеличивается на один, поэтому значения, присвоенные константам, продолжают удваиваться.

Теперь можно выполнить побитовое сравнение этих масок с интересующим нас числом:

v := 0b00000010
if v&Bit1 != 0 {
fmt.Println("Looks like bit 1 is set!")
}
// Looks like bit 1 is set!
👍20



tgoop.com/go_interview_lib/536
Create:
Last Update:

💬 Перечислите кейсы применения iota в Go.

🔸 iota и enums

Мы часто определяем константы в Go для создания списка возможных значений, которые что-то может принимать (это иногда называют enum).

const (
Planet = 0
Star = 1
Comet = 2
Galaxy = 3
// и так далее
)


Конкретные числа 0, 1, 2... здесь не имеют значения. Это просто произвольные значения, с которыми можно сравнивать объекты:

if object.Kind == Planet {
// это планета!
}


🔸 Использование iota с const

Однако поддерживать длинный список таких чисел вручную сложно. Вот где приходит на помощь iota. Это своего рода магическое, постоянно увеличивающееся значение, которое мы можем использовать для присвоения произвольных чисел константам:

const (
Planet = iota // 0
Star // 1
Comet // 2
Galaxy // 3
// ...
)


Мы фактически присваиваем iota каждой константе в списке, но Go позволяет опустить запись = iota после первой константы.

🔸 Начало iota с 1

Также мы можем использовать iota в более сложных выражениях. Например, если мы хотим, чтобы значения начинались с 1, а не с 0:

const (
January = iota + 1
February
March
// ...
)


Здесь значение для January будет 1, для February — 2 и так далее.

🔸 iota игнорирует комментарии

Кстати, можно добавлять комментарии или пустые строки в блок констант, и это не повлияет на значения iota:

const (
Electron = iota // 0
Neutron // 1
Proton // 2
Photon // 3
Gluon // 4
)


🔸 iota, флаги и битовые маски

Ещё одно распространённое применение iota — создание значений для битовых масок. Битовая маска — это способ сравнить число с бинарным значением, чтобы проверить, установлен ли конкретный бит в 1 или 0. Когда используются конкретные битовые значения, их иногда называют флагами, а число, содержащее их, — битовым полем.

Например:

const (
Bit0 = 1 << iota // 1
Bit1 // 2
Bit2 // 4
// ...
)


Оператор << сдвигает биты числа влево на указанное количество позиций. Так как iota увеличивается на единицу для каждой последующей константы, коэффициент сдвига тоже увеличивается на один, поэтому значения, присвоенные константам, продолжают удваиваться.

Теперь можно выполнить побитовое сравнение этих масок с интересующим нас числом:

v := 0b00000010
if v&Bit1 != 0 {
fmt.Println("Looks like bit 1 is set!")
}
// Looks like bit 1 is set!

BY Библиотека Go для собеса | вопросы с собеседований


Share with your friend now:
tgoop.com/go_interview_lib/536

View MORE
Open in Telegram


Telegram News

Date: |

Some Telegram Channels content management tips Healing through screaming therapy “Hey degen, are you stressed? Just let it all out,” he wrote, along with a link to join the group. Select “New Channel” Just as the Bitcoin turmoil continues, crypto traders have taken to Telegram to voice their feelings. Crypto investors can reduce their anxiety about losses by joining the “Bear Market Screaming Therapy Group” on Telegram.
from us


Telegram Библиотека Go для собеса | вопросы с собеседований
FROM American