Вредные советы для Go-программиста
В первой части публикации я объяснил, как стать «злобным» программистом Go. Зло приходит во многих формах, но в программировании оно заключается в намеренном затруднении понимания и поддержки кода. «Злые» программы игнорируют основные средства языка в пользу техник, которые обеспечивают краткосрочные выгоды, в обмен на долгосрочные проблемы. В качестве краткого напоминания, злые «практики» Go включают в себя:
- Плохо названные и организованные пакеты
- Неправильно организованные интерфейсы
- Передача указателей на переменные в функции для заполнения их значений
- Использование паники вместо ошибок
- Использование init-функций и пустого импорта для настройки зависимостей
- Загрузка файлов конфигурации с использованием init-функций
- Использование фреймворков вместо библиотек
Большой клубок зла
Что будет, если собрать все наши злые практики вместе? У нас получился бы фреймворк, который использовала бы множество файлов конфигурации, заполнял поля структур с помощью указателей, определял интерфейсы для описания публикуемых типов, опирался на «магический» код и паниковала всякий раз, когда возникала проблема.
И я сделал такой. Если вы зайдете на
https://github.com/evil-go, вы увидите
Fall (падение), — DI фреймворк, дающий возможность внедрять любые «злые» практики, которые только захотите. Я спаял Fall с крошечным веб-фреймворком
Outboy, который следует тем же принципам.
Вы можете спросить, насколько они злодейские? Давайте посмотрим. Предлагаю пройтись по простой программе Go (написанной с использованием лучших практик), которая предоставляет http endpoint. А затем перепишем ее, используя Fall и Outboy.