Новости
Только свои ошибки
В многослойном Go-сервисе легко случайно пропустить наверх ошибки хранения данных (например, sql.ErrNoRows) вплоть до самых обработчика HTTP или gRPC и это приводит к связыванию транспортного уровня с деталями реализации базы данных. Чтоб такого не случалос...
Паттерн репозиторий
Да да, банально, но всегда интересно смотреть кто как реализует разные паттерны Автор объясняет, как паттерн "репозиторий" помогает отделить бизнес-логику от деталей реализации хранения данных, что делает код более тестируемым, масштабируемым и гибким. Суть...
Байтоебство
Статья объясняет, как использовать битовые флаги и битовые маски в Go для эффективной конфигурации вместо множества булевых полей в структурах. Автор показывает идиоматический паттерн с iota для генерации степеней двойки (1, 2, 4, 8…), демонстрирует основные б...
Разбудить по сети
В статье подробно объясняется, как работает технология Wake-on-LAN, которая позволяет удаленно включать компьютер по сети. Автор разбирает структуру "волшебного пакета" (Magic Packet), который состоит из синхронизационной последовательности шести байт FF и...
Черный ящик
Вдохновившись механизмом trace.FlightRecorder, появившимся в Go 1.25, автор решил применить ту же концепцию "черного ящика" к логам: хранить последние N записей в кольцевом буфере без аллокаций на горячем пути, снэпшот по требованию и асинхронный сброс при оши...
Версионирование
В статье автор делится опытом разбора инцидента, где отсутствие информации о версиях приложения привело к многократной задержке устранения проблемы. Он утверждает, что в отличие от бытовой техники с детальной маркировкой версий, в разработке ПО стандарты в...
Константные мапы
В Go существует стандартная карта, которая для миллиона записей потребляет около 56 байт на ключ. Однако если карта создаётся один раз, не изменяется и все ключи заведомо существуют, можно значительно сократить расход памяти. Библиотека constmap реализ...
Вызываем Rust из Go
В принципе, нет никаких сложностей работать с Rust через cgo. Но автор решил заморочиться. В статье описывается создание Go-драйвера для базы данных Stoolap, работающего без cgo. Автор объясняет, почему отказался от стандартного cgo и WASM. Решение осно...
Условное выражение
Наверняка вы когда-то задавались вопросами "А есть ли в этом вашем Go тернарный оператор? Нет? А почему?" А может быть, мы и сами в состоянии изменить язык Go, чтобы поддержать в нём условное выражение? Давайте-ка попробуем погрузиться в недра его компилято...
Переписать с AI
Саксес стори как с помощью AI переписали популярный проект JSONata на Go Результат - gnata, чистая реализация JSONata 2.x на Go. Семь часов, $400 на токенах, ускорение типовых выражений в 1000 раз и начало цепочки оптимизаций, которая в итоге сэкономила раз...
Собеседование Go
Готовитесь к собесу на Go разработчика? Вам пригодится подборка задач по гошке. Есть самые разные задачи для всех уровней. Самое то, чтобы потренироваться и поправктиковаться в лайвкодинге
Снова про сборщик мусора
В предыдущей статье автор исследовал планировщик Go - как горутины мультиплексируются в потоки операционной системы, модель GMP и все приёмы, которые среда выполнения использует, чтобы держать ваши ядра занятыми. Но осталась одна фундаментальная проблема, ...
Визуализация памяти
В этой серии статей автор объясняет концепции управления памятью простыми словами и подробно рассмотривает, как устроено управление памятью в некоторых современных языках программирования. Надеюсь, эта серия поможет вам заглянуть под капот этих языков с точки ...
Названия переменных
Как известно, две самые сложные проблемы в программировании - как инвалидировать кеш и как называть переменные. В этой статье автор пытается ответить на второй вопрос. И дает много много рекомендаций: использование camelCase для неэкспортируемых и PascalCas...