Раз в полгода у меня случается ситуация, когда сервис на Go начинает жрать CPU или память сильнее обычного, и непонятно, откуда. Каждый раз спасает net/http/pprof. Но из раза в раз вижу коллег,…
Когда HTTP-сервис на Go получает SIGTERM, мало просто закрыть слушающий сокет. Между «решил выключиться» и «полностью выгрузился» происходит десяток вещей, которые легко проспать. На проде это…
Учу Rust в боевом режиме чуть больше года. Параллельно продолжаю писать и поддерживать сервисы на Go. Накопил список вещей, которые между этими двумя языками либо переносятся легко, либо вызывают…
В Go 1.21 появился log/slog — структурированный логгер в стандартной библиотеке. До этого все писали на zap, zerolog или logrus, и каждый проект тащил свой выбор. Сейчас можно жить на stdlib без…
В Go одна и та же задача параллельной обработки может быть написана пятью разными способами. Каналы, WaitGroup, errgroup, semaphore, fan-out/fan-in. Когда ревьюешь чужой код, часто видишь все пять…
Когда я пришёл в Go из Java, первой реакцией на интерфейсы было «где аннотации implements». Через пару проектов привык к утиной типизации, но потом долго не мог определиться: делать интерфейсы…
За девять лет работы с Go видел почти все способы неправильно использовать context.Context. Начиная от «положу-ка я туда логгер и сессию» до «почему мой воркер не останавливается, я же передал ctx».…
В Rust-коммьюнити есть негласное правило: panic! — зло, всё через Result. Это упрощение, которое приводит к смешным конструкциям: unwrap() внутри тестов, ? везде в main, и обработка ошибок «потому…
Каждый раз, когда я вижу sync.Pool в чужом коде, первая мысль — «зачем». Половина случаев это «вычитал в блогпосте, что pool ускоряет», и в реальности он либо не помогает, либо мешает. Другая…
Если параллельно пишешь на Go и Rust, рано или поздно ловишь себя на том, что путаешься в подходах к concurrency. В Go запустить горутину дешевле некуда: go func() — и забыл. В Rust на tokio запуск…
Когда в Rust-проекте появляется больше трёх крейтов, начинать каждый раз с нуля становится скучно. На пятом проекте я выработал свой workflow для cargo workspace, который теперь переношу из репо в…