Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

07.10.2022

Скорочення повторюваного коду на Go за допомогою кодогенерації

🐹🧙📑 Сьогодні рефакторив модуль на Go, в якому розплодився допоміжний код. Код такий, що не піддається звичайному розділенню на функції, а його треба копіювати з маленькими змінами багато разів. Тобто те, що називається boilerplate.

В Ruby таке вирішується метапрограмуванням. В JavaScript на функції можна розбити практично все. В Clojure код — це дані, тож проблема не існує концептуально. А що в Go робити?

Go - мова дуже проста. І з копіпастою справляється простим засобом — генерацією кода. Для цього є директива go generate. Її доцільно вжити, якщо ви бачите, що копіпаста не піддається рефакторингу.

Приклад задач, які я вирішував генерацією:

Генерацію кода дуже просто написати, я зазвичай роблю шаблон — буквально модулем text/template. Нічого особливого в генераторах немає, це може будь-яка програма будь-якою мовою.

Нарешті, помічаємо файли як згенеровані, щоб GitHub їх приховував.