TGViewer
dev notes dev notes @junsenior · 1.39K subscribers
Post #210 1.14K
Конспекты микросервисов отложились до лучших времен, и на то у меня есть причина: уже с месяц на работе я пилю проект на go. Проект небольшой, но интересный: много асинхронщины, много новых паттернов, и повсеместное страдание :D Страдание - это набитие шишек, а нибитие шишек - это лучший опыт.
Сервис я почти допилил, и за время работы над ним вынес несколько, вероятно очевидных, но интересных для меня вещей, которыми поделюсь ниже.

1. Если к обработке ошибок я уже давно привык, к тому, что каждую привычную конструкцию нужно писать с нуля - тоже, то вот к тому, что в go не принято делать подпакеты - не могу привыкнуть. Мне бы очень хотелось иметь 2 дирректории: internal/repository/mysql/ и internal/repository/clickhouse/, но так не принято :) Так что имеем internal/repository, где имеем кучу файлов, и стараемся к этому привыкнуть.

2. Для контроля количества одновременно запущенных горутин, в рамках какой-то задачи отлично подходит буферизированный канал: перед go func().. кидаем в канал значение, а в defer, внутри функции, запускаемой в горутине, убираем.

3. Чем лучше у тебя теоретическая база по асинхронщине, параллельному программированию и прочим страшным вещам - тем проще. В процессе всплывали ещё те знания, которые я получил в универе на курсе параллелки, и частенько помогали найти верное решение.

4. ORM в go (я юзал gorm) - плохое решение, не теряй время и бахай нативные запросы через sqlx. Лично у меня было несколько кейсов, которые ORM решить не смогла.

5. Все найденные мной библиотеки, реализующие работу с clickhouse - умеют в ограниченное число типов. Клик поддерживает, например, мапы, а либы, которая умела бы в такое - я не нашёл. В следующий раз буду это учитывать :)

6. Если тебе нужно проверять, запущена ли сейчас какая-либо задача в горутине, лучшее решение, которое я нашёл - go.uber.org/atomic + мапа.

7. gin - наиболее удобный веб-фреймворк, из тех, с которыми мне довелось работать. Прям максимально всё для людей.

8. Архитектурные паттерны (https://github.com/golang-standards/project-layout) - мастхэв. Просто подведя свой проект под такую структуру ты уже в процессе понимаешь, насколько она удобная и продуманная.

9. Gitlab ci/cd из коробки отлично справляется с деплоем go-приложения, за что ему честь и почет. На днях попробую github actions в пет-проекте и дам фидбэк, что удобней и проще.

Список будет дополняться по мере открытия мной чего-то интересного :)
pkg.go.dev atomic package - go.uber.org/atomic - Go Packages Package atomic provides simple wrappers around numerics to enforce atomic access.
More from @junsenior
  1. Sep 28, 2026Сошлись две вещи. Первая - мой проект safemap.ai, про который я уже писал выше - интеракти…
  2. Sep 17, 2026Post #356
  3. Sep 15, 2026Увидел тут в x.com статистику вакансий по PHP и статистику вакансий по hh.ru в целом. Я на…
  4. Sep 12, 2026Вдохновившись проектом, где делали интерактивную карту с тем, как работает Postgres (писал…
  5. Sep 8, 2026OpenAI выложили блогпост https://openai.com/index/navier-stokes-solution/ Мы публикуем реш…
  6. Sep 8, 2026Если кто не знал, вокруг этого сейчас разгорается очень большой скандал с OpenAI. Кратко,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →