Как мне было лень изучать discordgo и я написал свою библиотеку
Итак, как было сказано в заголовке - мне было лень изучать дискордго для разработки бота на go. Почему? Ну.. я тогда только сел изучать го и не имел четкого представления, что да и как, потому решил не лезть в библиотеку 15-ти летней давности, у которой явно куча легаси кода
Вместо этого я решил написать свой проект для маленьких ботов. Однако я не знал, как точно это делается. Полез изучать глубинную документацию дискорда - опа! Структура сетевого ядра по-немногу рисовалась сама.
Все изначально строилось на парсинге через map[string]struct{}, я тогда даже не знал о существовании базового энкодера, соника, запа и подобного
Потом я случайно удалил(где-то так через пол-месяца, месяц) разработки все коммиты репозитория. Там проблемой оказался токен, что вылился в сеть, ну и вышло
Со временем я начал понимать: разработка этой библиотеки мне нравится, я не могу без нее, периодически я всплесками возвращаюсь к ней, пилю что-то и опять забываю на неделю-две.
Что я смог сделать за эти 4 месяца?
Вот краткий список:
- Лок фри структура. Мутексов почти никогда нет. Я старался все поменять на атомики и работу с ними. Скоро хотел переписать все же пакет api на rw-мутексы, по-скольку это ушло к фанатизму и появилась одна некритичная проблема
- DI структура. Буквально сегодняшний коммит решал мою прошлую проблему - я делал все через синглтоны(старался делать), а теперь переношу все, если не уже, на di архитектуру
- cli, yaml - поддерживаются в библиотеке. Есть несколько примеров по ямлу в самом репозитории, cli же служит для инициализации проекта пока-что. Он собирает структуру проекта, которую я использовал для работы со своим ботом
- Частичная модульность. Легко переписать все, кроме сетевого ядра и основной структуры бота. Я постарался разделить сам проект на атомарные частицы. Простите, я бывший джавист
- Четкая типизация. Я старался делать так, чтобы нельзя было перепутать поля при взаимодействии с полями апишки дискорда
В целом, это все, что я мог рассказать основного о библиотеке. Я постарался сохранить и сделать все без божественнвх структур, я люблю легкую и удобную работу с библиотеками, однако в написании документации я плох. Основные примеры описаны в readme, так же старался документировать код по ходу написания проекта