lenec ru

← все теги

#go

8 постов

Профилирование Go-сервиса с pprof: пошагово на реальном примере

Раз в полгода у меня случается ситуация, когда сервис на Go начинает жрать CPU или память сильнее обычного, и непонятно, откуда. Каждый раз спасает net/http/pprof. Но из раза в раз вижу коллег,…

209 18K
Игорь Лебедев

Graceful shutdown в Go HTTP-сервисе: что обычно забывают

Когда HTTP-сервис на Go получает SIGTERM, мало просто закрыть слушающий сокет. Между «решил выключиться» и «полностью выгрузился» происходит десяток вещей, которые легко проспать. На проде это…

365 13K
Игорь Лебедев

slog в Go 1.21+: переход со старого логгера на структурированный

В Go 1.21 появился log/slog — структурированный логгер в стандартной библиотеке. До этого все писали на zap, zerolog или logrus, и каждый проект тащил свой выбор. Сейчас можно жить на stdlib без…

74 19K
Игорь Лебедев

Graceful shutdown: как корректно гасить сервис под нагрузкой

Сервис должен уметь умирать спокойно. На демках и в локальных тестах это выглядит непрактично — приложение работает, ну и пусть работает. В проде разница между корректным завершением и резким kill-9…

219 14K
Ирина Лисицына

errgroup vs каналы: как организовать параллельную работу в Go

В Go одна и та же задача параллельной обработки может быть написана пятью разными способами. Каналы, WaitGroup, errgroup, semaphore, fan-out/fan-in. Когда ревьюешь чужой код, часто видишь все пять…

129 14K
Игорь Лебедев

Интерфейсы в Go: маленькие vs большие, accept interfaces, return structs

Когда я пришёл в Go из Java, первой реакцией на интерфейсы было «где аннотации implements». Через пару проектов привык к утиной типизации, но потом долго не мог определиться: делать интерфейсы…

391 11K
Игорь Лебедев

context.Context в Go: типичные ошибки и как с ними жить

За девять лет работы с Go видел почти все способы неправильно использовать context.Context. Начиная от «положу-ка я туда логгер и сессию» до «почему мой воркер не останавливается, я же передал ctx».…

403 17K
Игорь Лебедев

Когда брать sync.Pool, а когда не стоит: бенчмарки и практика

Каждый раз, когда я вижу sync.Pool в чужом коде, первая мысль — «зачем». Половина случаев это «вычитал в блогпосте, что pool ускоряет», и в реальности он либо не помогает, либо мешает. Другая…

184 14K
Игорь Лебедев