Обновлён открытый ИБ-проект на Go под названием cariddi для поиска уязвимостей и проблемных мест на любых сайтах, включая спрятанные API‑ключи и токены, забытые админки, файлы, которые не должны были быть в открытом доступе.


Компилируемый, многопоточный язык программирования
Вышла новая версия fq 0.16.0
fq - это инструмент, язык и декодер для работы с двоичными данными. Конечная цель проекта — объединить в одном инструменте функции jq, hexdump, dd и gdb.
Поддерживаем массу форматов, полный список: https://github.com/wader/fq/blob/master/doc/formats.md
Написан на Golang.

GitHub: https://github.com/wader/fq
Успевайте поучаствовать в CodeRunWinterChallenge до 25 декабря!
Вечная зима… Лорд Нуль погрузил мир CodeRun в лёд. Только Кодерун с вашей помощью может бросить злодею вызов, покорить Пик Кода, остановить Ледниковый период и вернуть тепло... Впереди — 21 день восхождения…

Решайте задачи каждый день, помогайте Кодеруну и боритесь за призы:
Топ-20 получат умные колонки Яндекс Станция Лайт 2.
Топ-100 получат сертификаты, карьерные консультации и приоритет при отборе в Яндекс.
Как написать свой линтер на Go?
Бэкенд-инженер AvitoTech Вячеслав Овчинников на стриме Go live-Coding разобрал механику линтеров и то, как работать с AST Go-проектов. Слава показал, что создание собственного правила — это не магия, а понятный и довольно увлекательный процесс. На стриме он:
написал простой, но полноценный линтер;
показал, как парсить AST и анализировать типы;
добавил своё правило и нашел проблемные конструкции в коде;
подключил линтер к golangci-lint.
Специально для вас мы сделали запись стрима, рекомендуем к просмотру всем, кому интересна тема линтеров на Go.
Запись стрима также есть на YouTube.
В ноябре Александр Кувакин, backend-инженер в команде Engineering Excellence AvitoTech, рассказывал в статье на Хабре о том, как backend-разработчикам выстраивать систему тестов на бэкенде. В тексте Саша разобрал основные проблемы и тесты, которые проверяют бизнес-логику. Почитать можно вот по этой ссылке.
А вот здесь вы найдете еще больше материалов по Go — статьи, видео, подкасты.
Представлен открытый проект Telegram Downloader, который умеет легально, быстро и легко скачивать любые файлы даже из защищённых каналов и чатов, где закрыта пересылка контента:
качает даже тяжёлые файлы за несколько секунд.
загрузки экспортируются в JSON-формат прямо на локальный диск.
работает локально — вся информация о загрузках будет только на локальном ПК.
не нарушает политику мессенджера.

Обновили 3 популярных курса Практикума PRO — направления, которое объединяет программы для профи.
Мы регулярно обновляем программы курсов: следим за трендами рынка, собираем обратную связь студентов и добавляем актуальные инструменты. В этот раз серьёзно доработали три направления. Возможно, вы присматривались к этим курсам раньше — посмотрите, что изменилось.
Курс «Визуализация данных и введение в BI-инструменты»
Что нового:
Расширили стек инструментов. К DataLens, Datawrapper и Tableau добавили Superset и Power BI — теперь вы освоите пять ключевых платформ вместо трёх.
Добавили SQL-шпаргалки для подготовки данных к работе в BI-системах.
Переработали материалы на основе фидбэка: обновили уроки, дополнили примеры, перезаписали скринкасты и скриншоты. А ещё добавили дополнительные практические задания.
Что это даст:
гибкость при выборе инструментов под конкретные задачи;
ускорение и упрощение рабочих процессов;
больше практики на реальных кейсах.
Курс «Инженер машинного обучения»
Что нового:
Дополнительно проверили и исправили блокирующие места во всех модулях.
Обновили модуль 5: «Создание uplift-модели».
В модулях 1-4 актуализировали все инструменты и технологии.
Обновили бесплатную вводную часть и добавили в неё мини-проект — если ещё не проходили, самое время потестировать!
Что это даст:
ещё более качественный студенческий опыт;
первый практический результат — даже до покупки курса;
востребованные навыки в скилсете.
Курс «Продвинутый Go-разработчик»
Что нового:
Запустили расширенный тариф «Продвинутый Go-разработчик + инфраструктура и продакшн». Внутри:
+3 дополнительных спринта.
Kubernetes & Docker: управление контейнерами, оркестрация, деплой.
Observability: мониторинг и трейсинг через OpenTelemetry, Grafana, Prometheus, Jaeger.
Брокеры сообщений: интеграция Apache Kafka и RabbitMQ.
Сквозной проект для отработки навыков: разработка и вывод в продакшн сервиса аватаров (GophProfile) с фокусом на инфраструктуру.
Что это даст:
закроет вопросы деплоя, мониторинга и интеграции брокеров сообщений;
фокус на практических навыках продакшн-разработки;
реальный опыт решения комплексной инфраструктурной задачи;
сокращение времени на выход в продакшн;
повышение надёжности систем: научитесь быстро выявлять и устранять проблемы;
все скилы для уверенной работы с микросервисами.
Узнавайте новое и бесплатно практикуйтесь в панели управления Selectel

Привет, Хабр! Обычно (хоть и не всегда) по пятницам я приношу подборки полезных материалов для начинающих специалистов. Но в этот раз у меня кое-что новое. Сегодня я расскажу не только о том, что почитать, но и как бесплатно отточить полученные знания, не тратя кровно заработанные на аренду IT-инфраструктуры.
При изучении полезных материалов вы можете запросить промокод на 500 бонусных рублей, чтобы попрактиковаться в панели управления бесплатно. Подробные условия и инструкции по получению бонусов находятся на страницах с подборками статей:
Go — практический гайд по работе с Go. С ним вы научитесь писать простые сервисы и использовать этот язык в некоторых рабочих задачах, а еще получите большую подборку материалов для погружения в тему.
Python — как настраивать инструменты, работать с базами данных, создавать программы с интерфейсом и использовать Python для парсинга. А еще интересные задачи для практики (вот тут-то точно пригодятся бонусы).
Расширения PostgreSQL — самые полезные с объяснением, как применять их без лишней теории.
Docker — что такое Docker, как запускать контейнеры, собирать образы и использовать Docker Compose. А еще — чем технология отличается от Kubernetes.
Сети — научитесь настраивать базовые сетевые схемы, поднимать выделенные и облачные серверы, разбираться в связанности, публичных IP и облачных маршрутизаторах.
Кстати, все статьи в подборках, как обычно, полностью бесплатны и доступны без регистрации и вот этого всего. Читайте, узнавайте новое и практикуйтесь бесплатно.
Save the date: встречаемся 27 ноября на Wildberries & Russ Golang Meetup!

27 ноября в 19:00 приглашаем на Golang Meetup, где поговорим о том, как строить надёжную бизнес-логику, управлять памятью без потерь производительности и проектировать масштабируемую событийную архитектуру.
В программе — три доклада от инженеров Wildberries & Russ, которые решают эти задачи в продакшене каждый день: про иерархические стейт-машины в Go, реальные кейсы оптимизации GC и указателей, а также опыт создания единой платформы событий Databus.
🎤 Доклады:
Иерархические стейт-машины: инструмент для организации бизнес-логики | Сергей Шлянин, Go-разработчик в WB Bank.
1000 в 1: единая платформа для событий Databus | Виктор Такташов, Go-разработчик в платформе Trust & Safety.
Указатели в Go: от аллокации до GC — разбираем ошибки производительности на реальных примерах | Александр Бруяко, Unit Lead в сервисах Медиа.
После докладов — афтепати и нетворкинг с разработчиками Wildberries & Russ.
Регистрируйтесь, количество мест в офлайн ограничено.
Задача с system design interview как тема для пет проекта
Здравствуйте, уважаемые читатели. Интересуюсь микро сервисной архитектурой. Хотел бы написать серию статей, в которых поделюсь своим опытом создания пет проекта на микросервисах. Общее название - "Задача с system design interview как тема для пет проекта". В качестве задачи будет система сокращения ссылок. Хочу показать весь путь от реализации первой крайне упрощенной версии до полноценной версии с кешированием, базой данных и размещением на сервере. Система будет реализована на Golang. На Хабре уже есть статья с такой темой. Как Вы думаете нужны ли еще статьи по данной тематике?
Вышла новая версия Vacuum 0.19.5.
Vacuum – сверхбыстрый и лёгкий инструмент линтера и проверки качества OpenAPI, написанный на Golang и вдохновлённый Spectral. Он также совместим с существующими наборами правил Spectral.
Ключевые изменения релиза - исправление ряда ошибок.
GitHub: https://github.com/daveshanley/vacuum
ChangeLog: https://github.com/daveshanley/vacuum/releases/tag/v0.19.5
Вышел Goose 3.26.0.
Goose — это инструмент для миграции баз данных. Он представляет собой одновременно CLI и библиотеку. Управление схемой базы данных выполняется с помощью инкрементных миграций. Поддерживается SQL и Golang.
Поддержка БД: Postgres, MySQL, SQLite, YDB, ClickHouse, MSSQL и другие.
Ключевые изменения релиза:
Добавлена поддержка slog.Logger в Goose-провайдере, работает через опцию WithSlog
Добавлена более удобная опция WithTableName в Goose-провайдере
Добавлен универсальный интерфейс Locker для поддержки блокировки Postgres с табличной реализацией через lock.NewPostgresTableLocker
Исправлены незначительные ошибки и улучшены зависимости
GitHub: https://github.com/pressly/goose
ChangeLog: https://github.com/pressly/goose/releases/tag/v3.26.0
Вышел NATS.go 1.46 - Go-клиент для системы обмена сообщениями NATS.
Ключевые изменения:
Появились параметры конфигурации счетчиков стримов
Новые поля в ClusterInfo
Контекст и таймаут опции для Messages.Next() а также появился в Fetch поддержка контекста
Поддержка пользовательских префиксов имен для консумеров
Добавлена поддержка метаданных для KeyValue бакета.
Ошибка добавления максимального лимита потребителей (код=10026).
Возвращает более конкретную информацию об ошибке при проблемах пересоздания потребителя
GitHub: https://github.com/nats-io/nats.go
ChangeLog: https://github.com/nats-io/nats.go/releases/tag/v1.46.0
Хеш-таблица с транзакциями на Go
Привет, продолжим удивительное. Смех смехом, но на Go стали доступны:
И в отличие от C++, они еще не создают проблемы для Garbage Collector. Вы угадайте почему, а я немного процитирую:
------------------8<------------------
Все выглядит примерно так:
func NewMemDb() MemDb { /* ... */ }
type MemDb interface {
Close() error
StartTrn() Transaction
}
type Transaction interface {
Close() error
Get(key Ptrsz) (Ptrsz, bool)
All(getKeys bool, getVals bool) (keys []Ptrsz, vals []Ptrsz)
Set(key Ptrsz, val Ptrsz)
Del(key Ptrsz)
DependVal(key Ptrsz, val Ptrsz)
DependDel(key Ptrsz)
Commit() error
Rollback() error
}А именно:
Объект MemDb создается с помощью функции NewMemDb().
У MemDb есть функция Close() -- мы ОБЯЗАНЫ ее вызвать!!!
Объект Transaction создается с помощью функции StartTrn().
У Transaction тоже есть функция Close(). Да, мы ОБЯЗАНЫ!
Transaction работает с данными через lib.Ptrsz. Точно также, как и mdb.BlobMap.
Чтение данных выполняется посредством функций Get() и All(). Возвращаемые ими Ptrsz указывают на внутренние структуры MemDb. Они остаются валидными пока не завершена транзакция и не было вызовов Set() и Del(), инвалидирующих указатели.
Изменение данных выполняется посредством функций Set() и Del(). MemDb копирует себе байты, на которые указывают key и val.
Функции DependVal() и DependDel() устанавливают зависимости. Их проверяет Commit().
Функции Commit() и Rollback() завершают транзакцию. Завершают, но не закрывают! Мы ОБЯЗАНЫ вызвать Close()!!
Просто Close() означает Rollback().
------------------8<------------------
Вот, кстати, полный текст статьи, но там почти что невозможно обнаружить ссылку на исходники... Ага, не раз такое видел в комментариях!
Вышла новая версия пакета easyjson - 0.9.1, содержит исправления выявленных ошибок.
Пакет easyjson предоставляет быстрый и простой способ маршалинга/демаршалинга структур Go в/из JSON без использования рефлексии. Фундамент - кодогенерация.
В тестах производительности easyjson превосходит стандартный пакет encoding/json в 4-5 раз, а другие пакеты работы с JSON — в 2-3 раза.
Easyjson стремится сделать сгенерированный код Go достаточно простым, чтобы его можно было легко оптимизировать или исправить. Вторая цель — предоставить пользователям возможность настраивать сгенерированный код, предоставляя функции, недоступные в стандартном пакете encoding/json, такие как генерация имён в формате «snake_case» или включение поведения omitempty по умолчанию.
GitHub: https://github.com/mailru/easyjson
Подробности исправления: https://github.com/mailru/easyjson/pull/423
Привет, Хабр!
Всего две недели назад вышла версия Explyt 4.1 с поддержкой Python, MCP серверов, новыми Rules и Workflows, а уже сегодня мы рады поделиться новым релизом Explyt 4.2 с поддержкой Go. Теперь все фичи AI агента доступны в GoLand.
Важное обновление
Начиная с версии Explyt 4.2, мы вводим процедуру регистрации новых пользователей. Этот процесс займёт 30 секунд и позволит:
повысить стабильность и доступность инфраструктуры из любой точки мира
корректно соблюдать правовые требования
Если вы уже пользуетесь плагином, потребуется пройти авторизацию в своём аккаунте прямо из интерфейса плагина.
Запуская бесплатный 30-дневный триал Personal версии, вы сразу получаете 4000 кредитов, которые можно использовать для запросов к LLM.
Возможность пользоваться своими моделями без регистрации в версии Community по-прежнему остается.
Скачать Explyt 4.2 можно с нашего сайта. Для багрепортов и фичриквестов - GitHub Issues и чат с командой плагина. Будем рады вашей обратной связи и философским вопросам 🖖
Go + Windows = deadlock. Свет в конце тоннеля.
В прошлой статье я рассказывал о редком, но весьма опасном баге: поток под Windows зависал в вызове CancelIoEx, хотя документация Microsoft утверждает обратное. Суть проблемы — в пересечении синхронного и асинхронного ввода-вывода, где ядро Windows блокирует доставку APC, и поток остаётся навсегда «висящим».
История получила развитие не сама по себе: мы целенаправленно поднимали эту тему через support-кейс в Microsoft. В результате удалось подключить и Escalation Team, и разработчиков Go, ответственных за Windows-порт.
Финальный вывод: стандартная библиотека Go действительно использует неправильный API для отмены синхронных операций. Вместо CancelSynchronousIo, рекомендованного самой Microsoft, в коде до сих пор вызывается CancelIoEx.
👀 Сам проблемный вызов:
https://github.com/golang/go/blob/77f911e31c243a8302c086d64dbef340b0c999b8/src/internal/poll/fd_windows.go#L461
Хорошая новость: у команды уже есть рабочий proof-of-concept фикса:
https://go-review.googlesource.com/c/go/+/691395
Менее радостная часть: из-за сложности изменений и их влияния на рантайм правка запланирована только в Go 1.26 (февраль 2026). Бэкпорт в предыдущие версии практически исключён.
Что это значит для разработчиков
Если ваш сервис на Go под Windows внезапно «зависает» в CancelIoEx — это следствие бага в стандартной библиотеке, а не ваша ошибка.
До релиза Go 1.26 остаются обходные варианты:
не вызывать CancelIoEx для синхронных дескрипторов,
использовать CancelSynchronousIo, если есть возможность управлять потоками,
минимизировать использование пайпов в критичных местах.
Итог
Редкий flaky-тест Go (TestPipeIOCloseRace) оказался симптомом реальной и серьёзной проблемы. Благодаря эскалации через Microsoft Support и совместному разбору мы получили подтверждение, понятное объяснение и официальный фикс в планах.
⚡️ Если ваш Go-код на Windows зависает в CancelIoEx, теперь вы знаете: проблема признана и исправление уже в пути.
EasyP – тулбокс для работы с ProtoBuf
easyp – пакетный менеджер, билд-система и линтер для .proto файлов.
Хоть easyp и написан на #go 😱, одна из его фишек в том – что вы можете использовать любые плагины для генерации финального кода: он может быть хоть на #python, хоть на #rust.
Если много используете ProtoBuf – обязательно для ознакомления!
Пример конфигурации:
# Секция для правил линтера:
lint:
use:
- DEFAULT
# Секция с зависимостями:
deps:
- github.com/googleapis/googleapis
- github.com/grpc-ecosystem/grpc-gateway@v2.20.0
# Секция для правил сборки и генерации итоговых файлов:
generate:
plugins:
- name: go
out: .
opts:
paths: source_relative
- name: go-grpc
out: .
opts:
paths: source_relative
require_unimplemented_servers: falseПрощайте огромные Makefile с кучей скриптов для сборки.
Проект: https://github.com/easyp-tech/easyp
Документация: https://easyp.tech
Подборка обучающих материалов по языкам программирования от Selectel: Go, Python и JavaScript

Привет, Хабр! Несу вам небольшую подборку материалов, которые помогут новичкам лучше разобраться в трех популярных ЯП. Все статьи доступны бесплатно, регистрироваться нигде не нужно, вообще никаких обязательств с вашей стороны. Итак, поехали.
Go
Эти семь статей составляют практический гайд по работе с Go. Вы научитесь писать простые сервисы вроде сокращателя ссылок и использовать этот язык в некоторых рабочих задачах, а еще получите большую подборку материалов для погружения в тему (да, у нас тут подборка в подборке, так уж вышло). На прочтение всех материалов уйдет примерно два часа.
Python
Если самые базовые вещи в Python вы уже освоили, то эта подборка для вас. Вы узнаете, как настраивать инструменты, работать с базами данных, создавать программы с интерфейсом и использовать Python для парсинга. А еще здесь есть несколько интересных задач, чтобы можно было закрепить знания. Всего в подборке девять материалов, примерно на четыре с небольшим часа чтения.
JavaScript
Эту подборку мы с коллегами собрали для тех, кто только делает свой первый шаг в мир JavaScript. В пяти статьях рассказываем, как работать с переменными, типами данных и функциями, а также как строить логику с условными операторами. Практические примеры помогут освоить создание элементов и взаимодействие с ними через JavaScript, а задача в конце — закрепить знания и испытать навыки.
Мы на Let's Go Conf: расскажем, как приручали старый Gateway, и слетаем в космос

В этом году компания МойОфис стала партнёром конференции для Go-разработчиков Let’s GoConf, которая пройдёт 12 сентября в Москве в лофте «Пространство Весна».
В одном из треков выступит Герман Кравец, техлид модуля Календарь почтового сервиса Mailion. В своём докладе он расскажет о том, как команда Mailion работала с «наследием». Представьте: старый Gateway, застрявший на Go 1.19, сложный в поддержке, с самописными генераторами и C++-зависимостями, а конфигурации напоминают древние свитки... Герман поделится тем, как команда справилась с такими вызовами и как изменилась архитектура продукта.
Но конференция — это не только доклады. Для участников мы приготовили по-настоящему космическую игру: нужно будет спасти колонизаторов далёкой планеты, решать задачи по Go и получать призы. Уверены, это станет отличным дополнением к технической программе и подарит всем гостям отличный настрой.
Ждём вас на Let’s Go Conf!
Лутаем Open Source #24. Они наконец-то починили MongoDB! Перенеся его на PostgreSQL...
DocumentDB – БД от Microsoft, которая состоит из 3-х частей:
PG расширение, добавляющее BSON формат (написанный, на С)
CRUD API поверх него (С)
Сервис трансляции Mongo Query в SQL (Rust)
Для кого это?
И вроде как: "PG – классная база, а MongoDB Query + BSON популярные технологии" – и можно было бы поразмышлять чем это круто, но сначала важно ответить на один туманный вопрос: "кому такая БД может быть нужна?"
Классический PG
Сначала рассмотрим кейс, когда мы накладываем DocumentDB на обычный PostgreSQL.
Те, кто используют MongoDB если попробуют переехать на такой сэтап столкутся с тем, что:
Там нет шардинга (и насколько бы он не был сложно реализован в MongoDB, он есть и им активно пользуются)
Придется использовать двойной тулинг: Compas, чтобы наблюдать за корректностью данных с MongoDB Query, и SQL если надо посмотреть что там внутри
MongoDB поддерживает Uncommitted Read и Write Majority, что странно накладывается на PG: если разраб достаточно продвинутый и намеренно использовал Uncommitted, то с PG он потеряет скорость и Availability из-за PG Committed, а если он использовал Write Majority, то PG не совсем дает такую гарантию (обвал диска при WAL репликации – менее надежен, чем Write Majority)
А самое главное: когда ты работаешь с MongoDB ты можешь открывать 1000 коннекшенов и он вполне себе все это сожрет, потому что (1) коннекшен это тред, (2) при запросах нет никакой проверки реляционной целостности, да и в целом проверка сильно проще, чем в PG, а значит придется потанцевать с пуллерами и даже менять где-то запросы, чтобы не упасть по скорости
То есть, у mongo-юзеров это заберет все особенные фичи MongoDB и при этом не даст фишки PostgreSQL.
Distributed PG-like
А что, если мы положим DocumentDB на что-нибудь из серии CockroachDB, YugabyteDB, AWS Aurora, Citus или Neon?
Все 3 проблемы решаются:
Шардинг из коробки
Достаточно высокая скорость записи и чтения
Отсутствие проблем с коннектами
В такой ситуации DocumentDB начинает играть новыми красками.
Но если в Neon и Citus (и может YugabyteDB) еще есть шанс добавить текущий DocumentDB BSON плагин, то в для других представителей придется писать его с нуля (причем под каждый свой, потому что они построены каждый на своем KV хранилище).
Переезд в Linux Foundation
А еще они сейчас в процессе переезда из Microsoft в Linux Foundation, из плюсов они будут полностью под MIT лицензией и пейвола, за который будут прятать полезные фичи, из минусов, Microsoft могут и забросить, а никто другой не подхватить.
Итоги
Неоднозначная технология, пока имеет смысл в каких-то тонких кейсах, но в общем и целом, не вижу пока где тут middle-ground, может, вы что-то подскажете?
P.S.
А еще приглашаю вас к обсуждению в свой паблик в телеграмме 🦾 IT-Качалка Давида Шекунца 💪