Статья опубликована в рамках: Научного журнала «Студенческий» № 42(212)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5, скачать журнал часть 6, скачать журнал часть 7
ПРОВЕРКА СТРУКТУР НА ЗАПОЛНЕННОСТЬ В ЯЗЫКЕ Go
CHECKING STRUCTURES FOR COMPLETENESS IN GO LANGUAGE
Maxim Beryanov
Student, PIKT faculty, ITMO University,
Russia, Saint-Petersburg
АННОТАЦИЯ
Проверка полей структур Go одно за другим для проверки наличия значения – утомительный, избыточный и подверженный ошибкам процесс. В данной статье предлагается его упростить с использованием пакета reflect в Go.
ABSTRACT
Checking Go structures’ fields one by one to prove their value existence is a tedious, redundant, and error-prone process. This article proposes to simplify it using the reflect package in Go.
Ключевые слова: структура, Go, reflect, проверка, nullable.
Keywords: structure, Go, reflect, check, nullable.
Рефлексия в программировании [1] – это способность программы исследовать свою собственную структуру, особенно через типизацию, это одна из форм метапрограммирования. Мы будем использовать возможности рефлексии (рисунок 1), чтобы проходить по всем полям структуры [2] в цикле, проверяя значение каждого поля на наличие, получая доступ к его имени – зная его имя, мы можем определить более подробное сообщение об ошибке.
Большим недостатком пакета reflect [3] является исключение (паника) во время его выполнения при неправильном использовании в коде. Вот почему всегда рекомендуется проверять, какие данные мы передаем функциям рефлексии.
Рисунок 1. Функция проверки заполненности значений полей
Представленная выше функция получает на вход интерфейс, вид которого обязательно проверяется перед операциями выявления пустых значений – разрешается только вид Reflect.Struct, даже указатель на структуру вызовет исключение (панику). Функция вернет ошибку с информацией о том, какие поля структуры не были заполнены. Проверка работоспособности предложенного кода происходит на рисунке 2. Мы видим, что создается объект типа MarvelHero с заполненными 2-мя полями из 4-х. В первом случае выполнение кода образует в консоли сообщение об ошибках: “не заполнено поле структуры 'abilities’, не заполнено поле структуры 'relationWith'”. После заполнения оставшихся полей значениями во втором случае, ошибки исчезают.
Рисунок 2. Проверка заполнения полей структуры
Таким образом, был создан удобный инструмент для быстрой проверки заполняемости всех значений внутри структурного типа в языке Go [4] – нам не нужно собственноручно указывать каждое из полей и добавлять к ним проверку, это происходит динамически и универсально для любого типа структуры внутри цикла.
Список литературы:
- Интроспекция и рефлексия [Электронный ресурс] URL: https://tproger.ru/translations/programming-concepts-introspection-reflection (дата обращения: 18.12.2022).
- Структуры в языке Go [Электронный ресурс] URL: https://metanit.com/go/tutorial/4.2.php (дата обращения: 18.12.2022).
- Go-библиотека reflect [Электронный ресурс] URL: https://pkg.go.dev/reflect (дата обращения: 18.12.2022).
- Go [Электронный ресурс] URL: https://go.dev (дата обращения: 18.12.2022).
Оставить комментарий