
- Главная
- Каталог
- Интернет технологии
- Golang Portal
Golang Portal
Присоединяйтесь к нашему каналу и погрузитесь в мир для Golang-разработчика
Статистика канала
net/http.
Если нужна рекомендация по библиотекам для старта:
• добавляй небольшой роутер вроде Chi только когда реально почувствуешь "трение" (что без него неудобно);
• избегай тяжёлых фреймворков типа Gin, пока тебе реально не понадобятся их возможности;
• для БД предпочитай "чистый" SQL и инструменты вроде sqlc, а не большие ORM вроде GORM.
Если прямо сейчас нужен TODO-лист:
• начни с net/http и один раз собери всё полностью сам;
• пиши хендлеры через http.HandlerFunc;
• регистрируй роуты через ServeMux;
• добавляй middleware, оборачивая хендлеры;
• парси JSON вручную через json.Decoder;
• обрабатывай ошибки явно (через fmt.Errorf);
• логирование делай сам (глобальный logger);
• реализуй graceful shutdown (например: https://victoriametrics.com/blog/go-graceful-shutdown/).
Это помогает понять жизненный цикл запроса, прокидывание context, отмену/cancellation, запись ответа и т.д.
После этого любой фреймворк будет выглядеть просто как тонкая обёртка. Без этой базы фреймворки кажутся "магией" и их сложно дебажить.
Если замечаешь, что начинаешь копипастить шаблонный код между проектами – это и есть сигнал добавить библиотеку. Не раньше.
Когда понадобится более удобная маршрутизация – подключай Chi. Он остаётся близким к http.Handler и ничего не скрывает.
Ты по-прежнему работаешь с http.Request и http.ResponseWriter. Стоимость миграции почти нулевая, и при желании его можно убрать позже. Это снижает lock-in и упрощает ментальную модель приложения.
Избегай тяжёлых фреймворков на старте.
Gin добавляет свои:
– тип контекста;
– флоу ошибок,
– систему биндинга
Это жёстко привязывает приложение к их API. Рефакторинг "назад" потом довольно болезненный. Если тебе действительно не нужны автоматический биндинг, цепочки валидации или их экосистема middleware, то это лишняя поверхность API с небольшим профитом.
По работе с БД:
• сначала избегай ORM;
• используй database/sql напрямую;
• пиши SQL сам;
• используй prepared statements;
• мапь строки в структуры вручную;
• если хочешь больше безопасности и меньше рутины – используй sqlc, чтобы генерировать типизированный Go-код из SQL.
Так SQL остаётся видимым, дебажимым и переносимым. ORM часто прячут запросы, генерируют неожиданные JOIN’ы и ломаются при обновлениях версий. Многие на этом обжигались.
Правило по зависимостям, к которому большинство из нас в итоге приходит:
«Используй stdlib, пока она тебя не ограничивает. Затем добавляй минимально возможную зависимость. Предпочитай маленькие, сфокусированные библиотеки вместо полноценных стеков.»
sync.Pool — это паттерн пула объектов для оптимизации памятиНет, это неверно.
sync.Pool — это оптимизация по CPU.
Цель использования sync.Pool – кэшировать временные, уже выделенные объекты для повторного использования. Это снижает нагрузку и на аллокатор памяти, и на сборщик мусора, а оба этих механизма активно потребляют CPU:
- Heap-аллокации для аллокатора: CPU тратится на поиск места под объект, обновление метаданных аллокатора, возможное обнуление памяти и т. п.
- Работа GC (сканирование, маркировка, очистка): GC выполняет реальную работу с памятью и метаданными, что тоже требует CPU.
Соответственно, sync.Pool помогает оптимизировать CPU-время. Но важно понимать: он не просто "уменьшает CPU", а уменьшает CPU-время именно в коде с большим количеством аллокаций.
Поэтому перед оптимизацией нужно ответить на вопрос:
«Тратит ли этот участок кода заметное количество CPU-времени на аллокации?»
Есть и ещё одна скрытая проблема: sync.Pool экономит CPU только если объекты реально переиспользуются. Go рантайм имеет право через какое-то время выбрасывать элементы из пула (как это работает: https://youtube.com/watch?v=fwHok9ZhQaY). Если в вашей программе Put/Get происходят недостаточно часто, пул может оказаться пустым – и тогда аллокации всё равно будут происходить.
Так уменьшает ли sync.Pool потребление памяти?
50 на 50. sync.Pool может даже увеличить потребление памяти, потому что всё, что вы положили через Put, остаётся сильно достижимым через пул, пока рантайм не решит это выкинуть. То есть запуленные объекты считаются "живыми" в heap, пока лежат там.
Если ваша цель — использовать меньше RAM, правильный подход – смотреть и на скорость аллокаций, и на поведение резидентной памяти / heap под вашей реальной нагрузкой. Например, через runtime.MemStats и heap-профили в pprof. Довольно часто можно увидеть ситуацию, когда sync.Pool сильно снижает количество аллокаций, но RSS при этом остаётся примерно тем же самым или даже становится выше.
Отзывы канала
всего 2 отзыва
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
Golang Portal — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 8.0K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 9.0, количество отзывов – 2, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 4895.1 ₽, а за 15 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий