Note1: Поскольку по соглашениям я не имею права публиковать код коммерческих продуктов, и не стал бы делать это по профессиональным принципам, то в примерах буду использовать только то, что либо оговорено как opensource, либо явно незначительное, или сделано мной вне коммерческих работ.
Цель cоздания этой страницы: показать опыт разработки, и избежать простых вопросов типа “что будет, если писать в закрытый канал, по дизайну runtime” (“надо дать по рукам обучить контролю жизненного цикла объектов того, кто так пишет код”).
Вы можете убедиться в понимании принципов, и моей методичности, даже при создании некоммерческих продуктов.
Note2: Большое количество подходов, решений, стандартов не охвачено примерами ниже, или скрыто внутри и отсутсвует в описании ниже. О подходе к деятельности отдельно, например, специально изучал проектное управление в оригинале, PMM, и сдал минимальный экзамен.
Упрощенный и переделанный вариант моего же фреймворка для коммерческого проекта.
Клиентская часть включает три метода: Exec, Get, Put. Два последних позволяют, вместе с RPC, запросить или отправить на сервер в потоке BLOB размером в гигабайты. В требованиях до 5-10Gb, массово по 16-64Mb.
Есть возможность добавлять свой middleware, в pre- и post- обработке. Рабочие примеры плагинов включены в пакет.
Включает опциональную дайджест аутентификацию, и возможность легко сделать авторизацию запросов.
Написание API очень простое - 1 обрабочик, 1 структура запроса и 1 ответа для 1-го API, общие для клиента и сервера. Можно сделать генератор API хоть из камней и палок.
Ответ на Put обрабатывается асинхронно, что бы была возможность корректно и быстро ответить на вложенный RPC запрос и закрыть соединение, не дожидаясь приема всего BLOB-а. Get аналогично.
Разумеется, все запросы обрабатываются в отдельных потоках. Есть обработка паники для потоков.
Для тестирования ответ-запрос сделан фейковый Conn, соотвествующий по интерфейсу библиотечному TCP
По идеологии неожиданно получился похожим на фреймворк Gin.
Три класса мини-сервисов: управляющий “мастер”, системный агент и сервис хранения.
Идиологический предок: Bacula.
В разработке. Из особенностей: после оценки требований и существующих форматов упаковки, все-таки принял свой формат, позволяющий записать контрольные суммы и доп-информацию в хвосте, при передаче в резервной копии данных потоке
Небольшое full stack REST приложение, созданное для обеспечения процессов прозводства на фабрике.
Цель: дать возможность инженерам удаленно, с любого места и мобильного (да, риски осознаны всеми), остановить или запустить виртуальные KVM-машины с легаси приложениями.
Сделано для временно закрыть серъезную проблему, связанную с тяжело легаси приложениями.
Которое фактически останавливали производство целиком, по всем производственным линиям.
Цель достигнута, получено время для переработки легаси.
Особенность: все *.js, *.css и прочие данные фронта упакованы в obj file приложения, через кодогенератор.
Это полноценно инсталируемое Linux Debian приложение, по требованиям эксплуатации.
Небольшая Unix утилита, написанные за пол-выходного. Для поиска идентичных файлов в своих медиа-фото архивах.
Особенность: скорость обработки и простота использования.
Использовал Hash-алгоритм https://github.com/minio/highwayhash
Сделал как порядочный дистрибутив в систему.
Пакет с кастомными типами Int, Float, Bool и прочими, для десериализации и нормализации некорректных JSON документов.
Использован в сервисах коммерческих шлюзов-обработчиков, 24/7 принимающим данные из транспортно-логистических компаний.
Клиент для чтения и дальнейшего разбора Apollo GraphQL сообщений, передаваемых по web сокету. Из коммерческого проекта.
Написан мной по спецификации протокола https://github.com/apollographql/subscriptions-transport-ws/blob/master/PROTOCOL.md за отсутсвием готового пакета на Go.
GraphQL over Apollo protocol over websocket over HTTP over TCP, но таково было требование по взаимодействию сервисов.
Модуль и middleware для Gin, созданный для кастомной JWT аутентификации корпоративных сервисов.
Не последняя версия, какая-то из промежуточных рабочих.
Код авторизации API (“этот запрос-api этому клиенту можно-нельзя”) не публикую, из-за коммерческих данных.
Кастомный dummy proxy-recorder, созданный для записи данных запросов. И их дальнейшего анализа из полученного массива.
Создан за полдня, работал трое суток (принимал копии запросов, и записал пару гигабайт json документов), но позволил отследить и понять все форматы json документов, передаваемые между компаниями. Без обращения ко множеству департаментов, которые могли затянуться на месяцы и кончится ничем.
Опубликован упрощенный вариант, без коммерческой аналитической части. Может быть пригодится.
На базе Gin.
Мой шаблон, которым пользуюсь.
Сделана как опорная реализация-шаблон, для коммерческих мини-сервисов. Данный open source вариант не включает обработку пакетов запросов.
Включает особенности
Генератор схемы для произвольной Go структуры, через рекурсивный анализ c помощью пакета reflect
Одно из маленьких исследований для коммерческого проекта.
“Не Go единым”. Годами ранее довольно много кода написано на С & Perl, немного на С++, и еще разных.
Это действительно минимальная основа встраиваемой операционной системы:
Ничего особо нового, но написана самостоятельно, чисто, с пониманием и перелопачиванием документов.
Цель: часть любительского проекта для встраиваемых летных систем, и профессиональное развитие.
Весь код, за исключением FreeRTOS, написан самостоятельно, на основании документации по устройствам.
Цель: поддержание профессиональных навыков и знаний, “just for fun” и рабочий шаблон встраиваемой системы.