Shanraq.org Shanraq.org

Go тіліндегі өз фреймворкіміз: shanraq.org қалай құрылған

Бұл сайт дайын CMS-те де, веб-фреймворкте де жұмыс істемейді. Жарияланымдар, хабарландырулар, жарнама, аудармалар, таратылымдар мен төлемдер — осында, Go тілінде жазылған модульдерден жиналған.

Сандар

271 файлда 43 031 жол код және 16 581 жол тест. 14 модуль, 143 дерекқор миграциясы, 36 үлгі.

Және бүкіл сайтқа екі файлда 589 жол JavaScript. React те, Vue де, жинақтауыш та жоқ. Безендіру — Bootstrap пен Tailwind-сыз, 3 478 жол өз CSS-іміз. Сіз оқып отырған бет бірде-бір бөгде скрипт жүктемейді.

Модуль дегеніміз не

Өзегі — бір әдістен тұратын интерфейс:

type Module interface {
    Name() string
}

Әрі қарай модуль өзіне керегін қосады: беттері болса — Routes, сервер қосылғанға дейін дайындық керек болса — Init, фондық жұмысшы ұстаса — Start. Қосымша модульдерді тізімге жинап, іске қосылғанда әрқайсысына Runtime береді: конфигурация, логер, дерекқор байланыстарының пулы және роутер.

Жүйені бүтін ұстайтын ереже осыдан шығады: модуль көршілерін білмейді. Мақалалар хабарландыруларды импорттамайды, хабарландырулар поштаны импорттамайды. Модульді алып тастау — тіркеудің бір жолын алып тастау деген сөз.

Бүгінде олар он төртеу: ai, apikeys, articles, auth, health, jobs, media, migrations, notifier, ratings, sms, syndicate, telemetry, webui.

Дайын күйінде алынғаны

Тізімді толық келтіреміз, себебі «өз фреймворкі» көбіне «бөтеннің үстіндегі өзінікі» дегенді білдіреді — және бұл тікелей айтылса, әбден қалыпты.

Маршруттау — chi. Postgres — pgx. Логтар — zap. Конфигурация — viper. Миграциялар — goose. Markdown — goldmark. Метрикалар мен трассировка — Prometheus және OpenTelemetry.

Жоқ нәрсе: ORM. Дерекқорға сұраныстардың бәрі SQL тілінде жазылған және оларды орындайтын кодтың қасында жатыр.

Неге JavaScript-сіз дерлік

Сайтты телефоннан оқиды, көбіне баяу байланыста және аудан орталықтарында. Алдымен мәтін салу үшін фреймворк жүктейтін бет ол жерде ашылмайды.

Сондықтан HTML серверде жиналып, дайын күйінде келеді. JavaScript тек онсыз болмайтын жерде қалады: карусель, жауын-шашын картасы, тіл ауыстыру. Ауа райы болжамында жер таңдау кәдімгі формамен жасалған — бірде-бір жол скриптсіз.

Үш тіл

Қазақша, орысша және ағылшынша — интерфейс аудармасы емес, мазмұнның тең құқылы үш нұсқасы. Мақаланың үш мәтіні бар, әрқайсысының өз мекенжайы мен өз canonical-і. Машиналық аударма бар, бірақ ол ұсынады, шешімді автор қабылдайды.

Код ашық: https://github.com/DauletBai/shanraq.org