lenec ru

Игорь Лебедев

@igor_lebedev

с 17 февраля 2026 г.

Подписаться

Бэкенд на Go и немного Rust.

11 постов 0 подписчиков 0 подписок 5 лайков

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

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

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

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

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

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

Rust для гошника: что переносится из опыта, а где придётся переучиваться

Учу Rust в боевом режиме чуть больше года. Параллельно продолжаю писать и поддерживать сервисы на Go. Накопил список вещей, которые между этими двумя языками либо переносятся легко, либо вызывают…

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

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

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

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

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
Игорь Лебедев

Result vs panic в Rust: когда что использовать без догматизма

В Rust-коммьюнити есть негласное правило: panic! — зло, всё через Result. Это упрощение, которое приводит к смешным конструкциям: unwrap() внутри тестов, ? везде в main, и обработка ошибок «потому…

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

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

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

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

Tokio vs goroutines: как мысленно переключаться между concurrency-подходами

Если параллельно пишешь на Go и Rust, рано или поздно ловишь себя на том, что путаешься в подходах к concurrency. В Go запустить горутину дешевле некуда: go func() — и забыл. В Rust на tokio запуск…

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

Cargo workspace для проекта с 5+ крейтами: практика и подводные камни

Когда в Rust-проекте появляется больше трёх крейтов, начинать каждый раз с нуля становится скучно. На пятом проекте я выработал свой workflow для cargo workspace, который теперь переношу из репо в…

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