Обновить
128K+

Go *

Компилируемый, многопоточный язык программирования

175,59
Рейтинг
Сначала показывать
Порог рейтинга

Подключайся к онлайн-митапу MWS — эксперты поделятся опытом организации стабильных Go-сервисов ⚙️

MTC Web Services (MWS) приглашает на митап для Go-разработчиков. Подключайтесь онлайн к встрече 11 августа в 15:00, чтобы узнать, как эксперты из MWS и Cloud.ru строят высоконагруженные системы. Спикеры разберут три ключевых слоя Go-сервисов на реальных кейсах и продакшн-опыте.

Вас ждет три технических доклада:

1. «Построение агентов на A2A с изолированным исполнением на Go»

Go-разработчик Вера Касьяненко из MWS расскажет, как построить ИИ-агентов  с выполнением потенциально опасных действий в изолированной среде, используя A2A и Client-go, и какие ограничения необходимы для этой изоляции. Она разберет модель угроз, жизненный цикл задачи и ограничения для безопасного исполнения.

2. «Как разрабатывать эффективные и экономичные Kubernetes-операторы на Go»

Алексей Ковалев из Cloud.ru на примере реального cluster-wide оператора покажет, как снизить потребление памяти с 7,5 ГБ до 400 МБ, а P95 цикла согласования —- со 150 до 40 мс. Он расскажет о кешировании, индексации и балансе между производительностью и стоимостью.

3. «Точный Rate Limiting на API Gateway в мульти-ЦОД инфраструктуре»

Андрей Пушкарев из MWS Octapi расскажет, почему готовые решения Redis, In-Memory Data Grid и Gossip-протокол — не выдерживают требований по нагрузке и латентности в их инфраструктуре, и как они написали собственную систему шеринга состояния и алгоритм ограничения нагрузки на бэкенд.

📅 Когда: 11 августа (вторник) в 15:00, онлайн

👉 Регистрируйся, чтобы послушать про опыт инженеров, задать вопросы и обсудить собственные кейсы.

Теги:
+3
Комментарии0

Привет!

Появилась идея: локальная база знаний, строящаяся по коду проекта на вашем компе и способная человеческим языком отвечать на вопросы по проекту, помогающая джунам быстро вкатиться в суть, а синьорам бегло проверить что они сломают очередным обновлением. Интересно ли было вам таким пользоваться? Помогло ли бы оно?

Поделитесь в комментариях)

Upd. Спасибо за комментарий, важная оговорка: проект работает локально на вашем компе, без утечек в инет)

Теги:
+5
Комментарии13

Фронтенд для души, бэкенд для людей!

Мастер по разводу холивар
Мастер по разводу холивар

Были приняты меры погрузиться под воду дабы показать серьезность моих намерений в данной щепетильной теме.

Фронтенд весь такой разносторонний, креативный, местами легкий, местами настолько сложный что ломаешь голову. Напрашивается клеймо "для любителей".

Бэкенд наоборот поддерживает порядок и структурность. Меньше экспериментов и больше проверенных решений, самое то для "сделал работу - пошел спокойно домой".

Теги:
+3
Комментарии2

Вышел lazy-tmux 0.2.0!

Напомню в двух словах: lazy-tmux — менеджер tmux-сессий на Go, который показывает все сохранённые сессии деревом, но реально восстанавливает сессию с её процессами и скроллбэком только когда вы её открываете, а не поднимает всё разом. Подробнее про сам проект я уже писал раньше, а сейчас — про новый релиз, в котором накопилось много всего.

Настройки наконец переехали в TOML-конфиг. Раньше приходилось прокидывать флаги каждый раз, теперь есть файл: config gen создаёт болванку, config show печатает итоговую конфигурацию с учётом всех источников. Заодно появился контроль над тем, что вообще перезапускается при восстановлении сессии — белый и чёрный списки, причём оба матчатся как регулярки по всей командной строке.

Сильно переработал сам TUI picker: нормальная тема, поддержка мыши, цветные режимы действий, панель хоткеев по ?, относительное время снапшота. Пока сессия поднимается, прямо внутри picker’а теперь рисуется анимация загрузки, а Esc аккуратно отменяет восстановление и убивает частично поднятую сессию.

Ещё в релизе появился слой интеграций со сторонними программами, и первая из них — Claude Code. Рядом с каждой сессией в picker’е показывается живой статус: работает, ждёт вашего ответа или подтверждения, либо просто простаивает. Когда крутишь несколько агентов по разным проектам, удобно видеть, кто из них заблокирован, не переключаясь внутрь каждого. А восстановленные окна Claude сами переподхватывают свою сессию.

Из остального: проверил совместимость с tmux от 2.9 до 3.7b, починил поведение когда сервер tmux вообще не запущен, добавил фоновый демон автосейва, команду version и обновил сайт документации.

Поставить можно одной строкой:

curl -fsSL https://lazy-tmux.xyz/install.sh | sh

Есть и Homebrew с AUR. Код — https://github.com/alchemmist/lazy-tmux, документация — https://lazy-tmux.xyz. Проект ещё молодой, открытых задач хватает, так что буду рад фидбэку и контрибьюшенам!

Теги:
+3
Комментарии0

Вышел Echo 5.3

Echo - высокопроизводительный, расширяемый, минималистичный веб-фреймворк на Golang.

Echo построен на основе net/http и работает с ним через echo.WrapHandler / echo.WrapMiddleware, добавляя компоненты, которые стандартная библиотека оставляет разработчику: быстрый маршрутизатор на основе дерева решений, привязка запросов (с подключаемым валидатором), развитую экосистему middleware и централизованную обработку ошибок.

Ключевые новинки версии 5.3:

  • Добавлена ​​полноценная поддержка метода HTTP QUERY в соот с RFC 10008

  • Маршрутизатор: автоматическая обработка HEAD-запросов обработчиками GET

  • Изменение логики группировки middleware

GitHub: https://github.com/labstack/echo

ChangeLog: https://github.com/labstack/echo/releases/tag/v5.3.0

Теги:
+3
Комментарии0

Представлен открытый проект на Go под названием Castor. Умные ТВ не могут транслировать произвольное веб-видео, а зеркальное отображение экрана тормозит и теряет разрешение. Вместо этого Castor транслирует реальный поток в полном качестве с ПК на ТВ.

«Я создал Castor, потому что не мог транслировать веб‑видео со своего ноутбука на телевизор: не было Chromecast, не было AirPlay. Наведите его на любую веб‑страницу, и Castor найдет видео, извлечет поток, перекодирует его для вашего телевизора и транслирует в реальном времени. Он также принимает прямой URL‑адрес потока или идентификатор IMDB/TMDB и может встраивать автоматически сгенерированные субтитры», — пояснил автор проекта.

Castor запускает Chrome в headless режиме с рандомизированным фингерпринтом и скрытыми скриптами для маскировки автоматизации. Решение отслеживает весь сетевой трафик через протокол Chrome DevTools для захвата видеопотока, а затем запускает короткий конвейер действий: кликнуть по странице, перейти в самый большой iframe, решить проблему с Cloudflare Turnstile, если таковая появится, и снова кликнуть в качестве резервного варианта.

Теги:
+9
Комментарии0

Обещанная статья про yggvault

Эта статья должна была выйти на Хабре ещё две недели назад. Но спасибо администрации Хабра за безвовзратное удаление самописной статьи: освободившееся время я потратил на финальное доведение проекта до ума. Исправил мелкие баги, улучшил документацию и так далее.

Правда, связываться с Хабром после этого желания больше нет. Поэтому полноценное описание проекта опубликовано на Hackaday, а этот короткий пост — просто выполнение обещания опубликовать статью (в прошлом месяце, ага).

---

Что такое yggvault

yggvault — самостоятельное зеркало релизов и зависимостей, упакованное в один бинарный файл.

Оно забирает выбранные версии проектов с GitHub, GitLab, Bitbucket, Gitea или другого узла yggvault, проверяет их, сохраняет локально и публикует сразу в нескольких форматах.

Один процесс предоставляет:

  • совместимые с GOPROXY маршруты для Go-модулей;

  • репозиторий Composer v2;

  • исходные архивы .zip и .tar.gz;

  • JSON API и OpenAPI;

  • Atom-ленты обновлений;

  • веб-интерфейс с каталогом, версиями, хешами, командами установки и ссылками на архивы.

Вся фишка в том что внешняя база данных, JVM и тд не нужны. Данные хранятся локально, а уже загруженные версии продолжают раздаваться, даже если исходный forge временно недоступен, заблокирован или упёрся в rate limit.

Зеркало можно поднять локально, на VPS или в домашней сети. Дополнительно yggvault умеет работать внутри сети Yggdrasil — без публичного IP, DNS, проброса портов, root-доступа и отдельного системного демона. (Еще одна причина для статьи — популяризация Yggdrasil)

Несколько узлов могут использовать друг друга как доверенные «братские» зеркала и синхронизировать релизы через обычный Web или Yggdrasil.

Проект не пытается быть полным реестром всех пакетов или прозрачным прокси для всего Go. Его задача проще: надёжно хранить и раздавать выбранные зависимости через контролируемую вами точку.

Репозиторий:
https://github.com/voluminor/yggvault

Работающее публичное зеркало:
https://www.ratatoskr.space/pkg/

Полная статья и технические заметки:
https://hackaday.io/project/206175-yggvault-mirror-your-dependencies-in-one-binary

Теги:
+8
Комментарии0

Волею судеб я занимаюсь престранными вещами, вроде написания Go бэкэнда под Windows. С опцией переноса его в Linux контейнер. Можно было бы сразу разрабатывать под контейнер, но на моей рабочей машине недостаточно оперативки для комфортной разработки.

Мой бэкэнд реализует ряд REST API функций и начинает свою работу с ловли входящих соединений на порту. Для этого я использовал net.Listener, который как выяснилось испытывает сложности с повторным захватом порта, а SO_REUSEADDR, который прекрасно работает в С++ в Go работает, как-то, не очень. Автоматический запуск приводил к порождению бесконечного числа процессов, которые только писали в лог ошибки безо всякой полезной деятельности. И когда мне надоело заставлять это работать я решил использовать старый и проверенный метод: сделать так, чтобы бэкэнд запускался по каждому порту один раз. Оставим в стороне неинтересные подробности того как связывать процессы с конечными точками (endpoints).

И всё было прекрасно до тех пор, пока я не добрался до того, что os.FindProcess() всегда находит процесс. Даже если процесс уже завершился. В случае запуска на POSIX системе можно было бы использовать process.Kill(0), но на моём Windows 11 это не работает. И, в условно переносимом коде появилась ветка для Windows:

var perr *os.SyscallError if runtime.GOOS == "windows" && errors.As(errKill, &perr) && errors.Is(perr.Err, syscall.ERROR_ACCESS_DENIED) {
log.Warnf("unable to kill dead process: %d. Error: %v", pid, perr)
} else {
log.Warnf("unable to kill process: %d. Error: %v", pid, errKill)
return errors.New("previous process running")
}

А морали в данном посте не будет. Для меня это сильно похоже на Python, где я также делил код на Windows и POSIX. Вполне вероятно, что я просто не знаю простого и лёгкого способа добиться необходимого мне поведения.

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии9

Привет. Я пишу бэкенд на Go, люблю строгую типизацию и предсказуемость. Но игнорировать тему ИИ-ассистентов глупо, поэтому я решил проверить, насколько они применимы для сборки нормального, защищенного проекта, а не просто кривых прототипов.

Чтобы эксперимент был чистым, взял стек, с которым не работаю каждый день: Node.js (Express 5) и Vanilla JS. На выходе получился хаб с утилитами: https://toolkitch.ru/

Главная идея проекта - простые инструменты средствами компьютера. Меня всегда раздражало, что популярные онлайн-сервисы гоняют данные на свои сервера, хотя по факту это может выполняться на компьютере. Здесь инструменты работают строго client-side, то есть в браузере пользователя. Ничего не устанавливал и не скачивал, но выполнил на компьютере.

По технической части:

  • Express 5 и Bootstrap 5.

  • Безопасность: настроил Helmet, прописал строгие CSP заголовки и CORS.

  • Деплой: GitHub Actions -> Docker Hub -> docker-compose -> Traefik с авто-SSL.

Писать код помогал ИИ-ассистент KodaCode. Впечатления положительные: нейронка полностью сняла с меня рутину вроде написания докер-файлов, конфигов Traefik и однотипной верстки под 7+ разных инструментов. Моя задача сводилась к контролю архитектуры и безопасности.

Сайт оптимизировал в том числе под ИИ-поисковики (GEO/AEO), чтобы тот же Яндекс Нейро или Perplexity могли индексировать страницы и предлагать эти утилиты пользователям по прямым запросам.

Посмотреть, что получилось, можно по ссылке выше. Будет интересно узнать, как вы используете ИИ в своей инженерной рутине, и какие специализированные плагины/инструменты можете порекомендовать. За критику по UI/UX сайта также буду благодарен.

Теги:
Всего голосов 4: ↑4 и ↓0+6
Комментарии1

Язык, с которым у ИИ плохо

В подкасте Радио-Т 1018 был интересный момент, что у ИИ сейчас гораздо меньше опенсорсных репозиториев и датасетов на Swift, чем условно на Python или Go. И поэтому, как Claude Code, так и Codex хреново пишут нативные iOS приложения. А ведь API языка обновляется, имеющиеся данные в нейронках устаревают с каждым WWDC.

Я как бэкендер с этой темой не сталкиваюсь. Стало интересно, как в Apple вайбкодят разрабы и влияет ли это как-то на темпы разработки по сравнению с конкурентами. Apple Intelligence пока пытались запустить для обычных потребителей, или когда анонсировали переход на Gemini-бэкенд, это повлияло как-то на пайплайн разработчиков? Есть ли у их моделей какой-то секретный проприетарный датасет, чтобы повысить качество работы с их экосистемой?

Мне короткий гуглеж выдал, что анонсировался Swift Assist в 2024, но в 2025 году от него отказались в пользу доступа к любым моделям с помощью API-ключей. То есть сама компания не может предоставить продакшн тулинг за счет доступа к самому большому в мире закрытому репозиторию Swift-кода. Получается, Apple со своей закрытой инфраструктурой не может оставаться верной своей концепции. В эпоху агентской разработки у компании не получается замыкать на своем решении инженеров, чтобы не уступать конкурентам.

Тут у меня котелок начал накидывать вопросы.

Apple ладно, а какое будущее у новых языков программирования? Будут ли авторы новых языков задаваться вопросом «как мой язык будут поддерживать нейросети?» Их популяризация будет целиком и полностью за счет опен-сорс коммьюнити теперь, пока остальные языки будут писать агенты? Сообщества сами генерят синтетические данные для языков программирования, чтобы локальные модели лучше умели в определенный скилл? Или может для языков будут сразу разрабатываться скиллы или MCP? Какую роль в адаптации к агентсткой разработке будут играть компилируемые языки со строгой типизацией по сравнению с нестрогими, скриптовыми языками? А поддержка нового языка агентами на сносном уровне, - это повод для флекса в презентации у компании?

В интересное время живем.

Теги:
Всего голосов 3: ↑3 и ↓0+5
Комментарии8

Представлен открытый проект Navidrome Music Server, который позволяет слушать музыку с ПК где угодно. Работает очень просто: пользовательский ПК превращается в сервер, к которому можно получить доступ с любого устройства. Есть демо-версия проекта, чтобы понять принцип работы.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

На Go непривычно после Python

На работе переводим сервисы на Go. Делюсь ощущениями от Go, как FastAPI-питонист:

  • В Go классов нет, есть struct с полями.

  • Внутри структур нет методов. Перечислили поля и все. Дальше функцию связываем отдельно со структурой сигнатурой вида funс (s *SomeStruct) Greet () string {}. С аргументами читается еще тяжелее.

  • ООП нет, наследования нет. Связь между структурами через композицию.

  • Ошибки нужно обрабатывать руками без try ... except с помощью if err != nil {...}.

  • nil вместо None

  • Эксепшнов нет. Функции возвращают ошибку как обычное значение: val, err := SomeFunc(). Хотя в Python я ответ из кортежей прям не люблю и избегаю, тут это база.

  • Зато есть panic, которые по сути – необработанные эксепшны.

  • Но на паники есть recover, который лечит последствия паники :)

  • Комментарии через два слеша // comment

  • Докстринги над сигнатурами, а не под.

  • OpenaAPI для Swagger надо собирать самому без FastAPI. Напрочь забытый навык. Даже с либами вроде swaggo/swag делать это надо руками, с ошибками.

  • Валидации полей нужно писать руками. Нет аналога Pydantic с батарейками.

  • Строка в двойных кавычках "w" – строка. В одинарных 'w' – руна, другой тип данных, который принимает в себя только один символ. Писать слово или фразу в руну нельзя.

  • А есть еще backtick ` ` для тегов структур. В них как раз могут задаваться правила валидаций в go-playground/validator:
    type User struct {
    Name string `validate:"required,min=2"`
    }

  • len у строк в байтах. Символ в кириллице = 2 байта. len строки на кириллице ~х2, непривычно. Нужно считать длину рунами в строках.

  • Иинтерполяция делается через fmt.Printf(). В отличие от f-строк в Python требует в конце явного перевода строки с \n, иначе строки слипаются. 

  • Вместо snake_case – lowerCamelCase для приватных идентификаторов пакета, а UpperCamelCase для экспортируемых.

  • Первым аргументом в запускаемом приложении командой go run some-script.go неявно выступает путь до файла. Из-за этого появляются идиомы в циклах типо «начни со 2-го аргумента».

  • Моржовый оператор a := "some" в Go это инициализация переменной с присваиванием. В Python это оператор в if ... else блоках, который инициализирует переменную только если сработало условие.

  • Аргументы у методов – позиционные. DoSomething(first, second, last) против do_something(action=first, modifier=second, final_action=last) у Python. Python умеет в лаконичность, но тут Go в нее заставляет. У методов со сложными контрактами надо сигнатуру подсматривать.

Что в Go нравится:

Тут много наивного по неопытности :)

  • Горутины – топ. Не нужно в голове держать асинхронный код, потоки, процессы, футуры, CPU-задачи, IO-задачи – на все горутины. А для передачи данных – каналы. Горутины весят 2-4 КБ против ОС-потока в 2-4 МБ памяти. Нет танцев с GIL. go func и начинаешь в конкурентность.

  • Статическая типизация при сборке находит много ошибок без линтеров и mypy. Еще она заставляет явно писать типы данных в аргументах и ответах от функций. Код нагляднее.

  • Вместо двоеточий  и отступов фигурные скобки. Я еще с NodeJS любил не капризное авто-форматирование.

  • Go-скрипты собираются в бинарники. Для них не нужен установленный Python или JVM. Просто запускаем как обычный баш-скрипт через ./script

  • Импортировать пакеты нужно целиком. Как в Python только метод импортировать нельзя. Обязательная лаконичность тут нравится. Импорты аккуратные, а в коде вызов их функций более явный.

  • Код модулей удобно читать сверху вниз. Python – интерпретируемый. Все, что не объединено в класс, должно быть объявлено перед вызовом. Код приходится нередко читать снизу вверх. Go – компилируется, порядок кода неважен. Читать код по ходу пьесы проще.

  • Стандартный пакет для тестирования go test все умеет из коробки. Аналог pytest как внешняя зависимость не нужен.

  • Ради чего все это: перевод сервиса с Python на Go даже тупо с ИИ-агентом, по метрикам Prometheus (АБ 50/50 трафик) снизил время ответа и потребление CPU и IO-ресурсов в десятки раз.

Из-за последнего вас и спрашивают на Python-собесе «готов перейти на Go»? Бабки, с-ка, бабки.

Теги:
Всего голосов 7: ↑7 и ↓0+9
Комментарии5

Сегодня Go востребован для промышленной разработки бэкенда и микросервисов. Переход на него с Java или Python часто замедляется не из-за синтаксиса, а из-за незнания встроенных возможностей Go. Увидеть разницу можно на живых примерах одного и того же кода, который мы подробно обсудим 8 июня на бесплатном вебинаре «Go за час: почему вы перестанете писать на Java/Python».

За 60 минут разберём живое сравнение «как то же самое пишется на Python/Java и на Go», типичные ошибки перехода и встроенные инструменты из коробки — от автоформатирования и бенчмарков до кросс-компиляции одной командой. Все участники получат готовый план освоения языка до уровня Middle+ за четыре недели и поймут, как повысить свою рыночную стоимость с помощью современного инструмента для микросервисов и высоконагруженных систем.

На вебинаре:

✍️ Почему Go? Стоит ли в 2026 учить еще один язык?

✍️ Простота и ясность без классов и наследования.

✍️ Встроенная конкурентность. Горутины, каналы и мьютексы.

✍️ Инструменты из коробки. Разработка без тонны фреймворков.

✍️ Сборка и кросс-компиляция.

✍️Типичные проблемы. Игнорирование ошибок, гонки и при чем тут указатели?

📆 Когда: 8 июня, 17:00 — 18:00 (Мск)

👨‍🎓 Спикер: Власов Евгений — эксперт в области Backend-разработки, Golang, Python, архитектуры ПО.

👉 Записаться на вебинар👈

На вебинаре расскажем про ключевые отличия Go от привычных языков, а чтобы системно освоить промышленные инструменты рекомендуем курс «Golang-разработчик». Программа ориентирована на формирование навыков, необходимых для промышленной разработки на Go: асинхронная коммуникация через очереди сообщений, тестирование, профилирование (pprof) и трейсинг (OpenTelemetry/Jaeger). Старт: 16 июня. Места ещё есть.

👉Записаться на курс👈

Теги:
Всего голосов 2: ↑1 и ↓1+2
Комментарии0

Ближайшие события

🚀 Golang Roadmap 2026 — полная карта обучения на русском языке

Это бесплатный open-source roadmap на русском языке. Внутри — 19 модулей, каждый со своей теорией, практикой, бесплатными ресурсами и финальным проектом. Программа собрана так, чтобы провести вас от полного нуля до уровня Senior/Staff Go Engineer за 12–18 месяцев при темпе 10–15 часов в неделю.

Главный принцип обучения - практика > видосы. Каждую тему вы закрываете кодом: пишете, ломаете, чините, рефакторите. Любой модуль завершается мини-проектом, который можно положить в портфолио.

🎯 Кому подойдёт

🐹 Новичкам в Go — даже если до этого писали только на Python/JS/PHP

🛠 Backend-разработчикам с другого стека — хотите перейти на Go

📈 Junior Go-разработчикам — нужен путь до Middle/Senior

🚀 Middle-инженерам — закрыть пробелы в архитектуре, observability, distributed

🤖 Тем, кто хочет писать AI-инфраструктуру — модуль 18 специально про это

https://github.com/Develp10/golangroadmap2026

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

Вы попали в следующую ситуацию: граница, проверка, оператор просит разблокировать телефон. Отказаться нельзя или невыгодно. Что можно?

Стандартные ответы у мессенджеров слабые. Обычный app-lock PIN открывает то же приложение, под принуждением бесполезен. «Удалить аккаунт по PIN» лучше, но видно что что-то стёрто. Облачные TTL текущий запрос не закрывают.

В RCQ сделали по-другому. Локальная история шифруется AES-256-GCM, ключ выводится из PIN’а через PBKDF2-HMAC-SHA256 на 400к раундов с per-install salt в keychain. Разные PIN’ы открывают разные хранилища.

400к раундов это около секунды CPU на iPhone, достаточно медленно чтобы offline-bruteforce был дорогой. Но реальная защита это длина PIN’а: 4-значный перебирается за десятки минут на M-чипе, 8-значный за месяцы. Default 6-8 символов.

Четыре режима

  1. Real PIN - открывает реальный аккаунт.

  2. Decoy PIN - открывает отдельный аккаунт с собственным UIN и SQLite. Не пустой экран (пустой это сигнал), а правдоподобно освоенный: пара контактов, несколько сообщений.

  3. Wipe PIN - тихо стирает оба SQLite, чистит keychain, дёргает DELETE /auth/account. Без подтверждений и прогресс-баров. Через 3 секунды приложение перезапускается как свежеустановленное.

  4. Biometric - опциональная вторая дверь к real. Не совмещается с decoy/wipe (скорее для удобства).

Честно про границы

Защищает от: казуального осмотра, принуждённой разблокировки, ситуации «5 секунд до того как заберут».

Не защищает от: forensic-лаб с offline-bruteforce’ом короткого PIN’а, jailbroken устройства с активным debugger’ом, человека рядом который видел как вы вводите PIN (разумеется).

Threat model правильный: «есть несколько секунд до того как кто-то откроет приложение, дальше я не контролирую устройство». Для «forensic с неограниченным временем» нужны другие инструменты. Главное из них: не пользоваться телефоном для чувствительных переписок вообще.

Стек живёт в RCQ, открытая бета на iOS. Код открытый: github.com/rcq-messenger/rcq-ios. Про маскировку самого факта установки приложения будет отдельно.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии11

Открытый проект Go Interview Practice содержит обширный репозиторий для подготовки к собеседованиям на Go:

  • внутри — целая интерактивная платформа с задачами всех уровней. Могут готовиться как новички, так и профи.

  • ИИ‑интервьюер проверяет решения и сразу дает подсказки.

  • есть таблица лидеров, чтобы соревноваться с топами и видеть свой прогресс.

  • можно задать вопросы коммьюнити, если задача оказалась слишком трудной.

Теги:
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Как можно ошибиться при обработке ошибок в Go

Tе, кто до Go писал на языках с конструкциями try/catch, таких как Java и C#, наверняка испытывают легкое замешательство. Руки так и тянутся к try/catch заменителю — использованию recover в связке с defer — как к самому очевидному аналогу. Но это плохая практика и так делать не стоит. Давайте разберёмся, почему и как можно ошибиться при обработке ошибок в Go.

Теги:
Всего голосов 4: ↑4 и ↓0+5
Комментарии1

Сбалансированные Claude Code Safety Hooks с минимум false positive благодаря AST-парсингу Bash

Наконец-то сделал хуки моей мечты - достаточно безопасные и практически без false-positive. Хуки вымученные, эволюционировали на граблях можно сказать.

Собственноно, любой, кто проработал с агентами какое-то время отлично знает, что иногда они чудят, удаляя лишнее - папки, докер образы или даже целые базы вместе с инфрой. И их важно вовремя ловить за руку.
Хуки - это важнейшая часть работы с AI-кодинг агентами, привносящая в них не только детерменированности, но и безопасности.

Соответственно, когда хуков нет совсем или их мало, безопасность хромает - агент может уронить базу, сделать rm rf и тд, а если хуков слишком много , то... вы привыкаете клацать Enter на Allow, уже даже не читая о чем вообще сыр-бор. Поэтому, нужен тонкий баланс и хуками важно закрывать только действительно деструктивные, необратимые или критические действия.

Ну, и сразу второй нюанс - для блоков я предпочитаю использовать ask хуки вместо блокирующих, т. к. агенты нынче слишком умные и получив блокирующий хук, наверняка найдет способ обойти ограничение (особенно если прилетел какой-нибудь prompt-injection), тк хуки обычно весьма примитивны.

Короче-говоря, с учетом всех этих нюансов я написал свои opiniated-хуки, которые сам использую, они максимально сбалансированны по allow/ask с практически нулевым false positive - благодаря парсингу AST, а не regex'ам, которые обычно в хуках. Частично в основе лежит claude-code-safety-net весьма сильно переработанный и дополненный.

Внутри:
1. rmrm/unlink/shred вне cwd, по /etc, $HOME; через sudo, xargs, find -delete, pipe-to-shell.
2. infrakubectl, docker, terraform, helm, gcp.
3. dbDROP/TRUNCATE/DELETE через psql/mysql; redis-cli FLUSHALL/SHUTDOWN, supabase.
4. paas — Railway, Fly, Heroku, Vercel, Netlify с destructive-глаголами (PocketOS-класс).
5. gitreset --hard, clean -fd, checkout . / restore ., branch -D, stash drop/clear, push -f, push --delete.

Ссылка на репо: https://github.com/CodeAlive-AI/ai-driven-development/tree/main/hooks/balanced-safety-hooks

Из особенностей - написаны хуки на Go, поэтому выполняются буквально за несколько мс. Ну, и каждый, может поправить их под свои нужды, перекомпилировав бинарник. Еще из интересного - большинство хуков покрыты тестами.

Кстати, для простого и корректного управления своими хуками у меня есть отдельный скилл hooks-management, который теперь поддерживает Claude Code, Codex и OpenCode.

Если вам нравится такой контент, то не премините заглянуть в мой Telegram канал, в котором я регулярно делюсь всякими полезностями про AI-Driven Development: https://t.me/+A-CrVovS0lczMDVi

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии0

Сделал необычную RTS на Ludum Dare 59 за пару дней

Выглядит примерно так
Выглядит примерно так

Игра написана на Go (Ebitengine), исходники на есть гитхабе.

Поиграть можно в браузере, ведь Ebitengine имеет неплохой экспорт в wasm. Она мало весит, быстро работает, и экспорт не требовал лишних усилий - это вам не шуточный игровой движок.

Я накидал небольшой шаблон для игр на стеке своих геймдев-библиотек. Его можно посмотреть тут: https://github.com/quasilyte/gscene-game-template.

С этим шаблоном старт начала работы над игровой логикой и "мясом" игры становится ближе. Это позволяет +/- выйти на удобство какого-нибудь Godot, где не нужно первые несколько часов настраивать как у нас обрабатывается input, звук и сцены. Я этот шаблон буду дорабатывать по мере участия в джемах, за каждую мини-игру у меня копится TODO на то, что еще там можно было бы улучшить.

Если тема разработки игр на Go вам интересна, заходите в наше русскоязычное сообщество в телеграме. Мы там обсуждаем всякие библиотеки для геймдева, свои игры, и всё такое.

Кстати, ребята из чатика тоже сделали свои игры на Ebitengine, вот они:

Теги:
Всего голосов 7: ↑7 и ↓0+8
Комментарии15

lazy-tmux — быстрый и «ленивый» менеджер сессий tmux

Весь мой рабочий процесс происходит внутри сессий tmux. Долгое время я использовал tmux-resurrect + tmux-continuum. Они работали… но с нюансами. Иногда терялись все сохранённые сессии, а при множестве активных сессий всё оставалось загружено в память, в частности, запущенные nvim процессы, которые поднимаю lsp, что со временем отъедало все больше и больше ОЗУ.

Я мне нужен был инструмент, который показывает все сессии в виде дерева, но загружает их только когда я впервые перейдёте в одну из них.

Так родился lazy-tmux, написанный на Go. Ключевые фичи:

  • Сохраняет текущую сессию, конкретную сессию или все сессии целиком. Снимки сохраняют окна, панели, layout, команды (например, npm, docker-compose, редакторы) и опционально scrollback историю шела.

  • Ленивое восстановление: поднимается только выбранная сессия. RAM не расходуется на всё сразу.

  • Интерактивный TUI браузер с деревом сессий, окон и панелей, таблицей с активными командами, временем последнего снимка, количеством окон/панелей и статусом сессии. Поддержка fuzzy search для быстрого поиска.

  • Навигация и полное управление сессиями и окнами с клавиатуры в TUI браузере сессий.

  • Гибкая сортировка сессий и окон через флаги --session-sort и --window-sort

  • Можно заменить встроенный TUI на fzf, использую облегчённый бинарник.

  • Автосейв через фоновый демон, периодически снимающий все сессии на диск.

  • Восстановление при старте tmux для автоматизации workflow.

Проект ещё молодой, но буду рад любой помощи и идеям по улучшению: GitHub issues

За моими новостями можно следить в Telegram-канале

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

SIP-exporter: eBPF-мониторинг SIP-трафика для Prometheus

Хочу поделиться своим open-source проектом для мониторинга SIP-трафика — SIP-exporter. Это сервис, который использует eBPF для захвата пакетов прямо в ядре Linux и экспортирует метрики в Prometheus.

SIP-exporter — сервис, который захватывает SIP-пакеты (UDP/5060-5061) через eBPF socket filter, использует ringbuf для zero-copy передачи в userspace, парсит SIP в Go и экспортирует 40+ метрик в Prometheus, включает готовый дашборд для Grafana.

Архитектура: SIP Traffic → NIC → eBPF socket filter → ringbuf → Go poller → SIP parser → Prometheus

SIP-exporter экспортирует: активные SIP сессии (диалоги), SIP запросы по методам: INVITE, BYE, REGISTER, OPTIONS... SIP ответы по кодам: 1xx, 2xx, 4xx, 5xx, 6xx-, сессии.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

^ != <<

Знаете ли вы, что некоторые используют оператор '^' для возведения в степень? Хотя в ряде языков он действительно отвечает за возведение в степень, во многих популярных стеках разработки этот оператор выполняет операцию исключающего ИЛИ (XOR). Мы разберём, к каким последствиям приводит подобная путаница, и покажем реальный пример этой ошибки в механизме работы очереди внутри популярной библиотеки.

Теги:
Всего голосов 5: ↑5 и ↓0+6
Комментарии0

Китайские разработчики выпустили свой аналог OpenClaw, которому нужно всего 10 МБ ОЗУ. Легковесный проект PicoClaw:

  • полный контроль мессенджеров: ваш личный секретарь в Telegram и Discord, который реально разгребает завалы.

  • Deep Web Search: cёрфит по коду сайтов и выжимает только нужные данные без лишнего мусора.

  • поддерживает любые нейронки: GPT, Gemini, Claude.

  • манипуляция файлами: пишет, читает и правит конфиги на вашем диске прямо через консоль.

  • умеет мониторить новости, цены на товары и курсы валют по расписанию.

PicoClaw не требует огромных мощностей — ему нужно всего 10 МБ, а запускается он всего за 1 секунду.

Теги:
Всего голосов 4: ↑4 и ↓0+7
Комментарии1

Всем привет! Сделал Тетрис, в который можно играть в терминале. Получилось вполне залипательно)

Tetris
Tetris

Что умеет:

  • Все 7 фигур с wall kick при повороте

  • Превью следующей фигуры

  • Очки, линии, уровень

  • Скорость растёт с уровнем

  • Рекорд за сессию

  • Пауза, рестарт на ходу, экран game over

  • Центрируется в окне терминала

Видео геймплея
GitHub

Установка:

curl -sSL https://raw.githubusercontent.com/oakulikov/tetris/main/install.sh | bash

На Windows: открыть WSL/Ubuntu терминал и выполнить ту же команду.
Потом просто tetris.

Теги:
Всего голосов 9: ↑8 и ↓1+7
Комментарии5

Go vet не поможет! Статический анализ Golang проектов с помощью PVS-Studio

На нем написан Docker, Kubernetes, Gitea и многие другие проекты самых разных масштабов. Наверное, вы догадались, что речь идёт о Go. Мы никогда не писали об ошибках на Golang проектах, но настало время это исправить, ведь скоро выйдет анализатор PVS-Studio для Go!

Статические анализаторы являются довольно распространёнными инструментами в разработке. В Golang есть встроенный механизм статического анализа — go vet. Однако стандартные линтеры не всегда справляются. Для тех, кто с нами не знаком, мы — компания PVS-Studio, занимаемся разработкой одноименного статического анализатора для C, C++, C# и Java. В последнее время мы активно занимаемся разработкой анализатора для Go и уже скоро планируем выпустить открытую бета-версию.

В новом материале расскажем, какие нашли ошибки в популярных Golang проектах.

Теги:
Всего голосов 3: ↑3 и ↓0+4
Комментарии0

Открытый проект Go Katas поможет освоить язык программирования прямо Go. В репозитории решения есть сборник сотен ежедневных упражнений, чтобы довести навыки кодинга на Go до автоматизма, изучить конкурентность и Context, отработать Graceful Shutdown, а также защиту от утечек воркеров и правильный Fan-Out. Есть множество упражнений на Zero-Allocation парсинг, работу в sync.Pool и шардированные мапы.

Теги:
Рейтинг0
Комментарии0

Открытый мультиплатформенный проект Deletor умеет удалять ненужные и вредоносные файлы, кэш после рабочей сессии, улучшает производительность вашего SSD. Решение написано на Go.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

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

Теги:
Всего голосов 5: ↑4 и ↓1+3
Комментарии0

Вышла новая версия 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

ChangeLog: https://github.com/wader/fq/releases/tag/v0.16.0

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Как написать свой линтер на Go?

Бэкенд-инженер AvitoTech Вячеслав Овчинников на стриме Go live-Coding разобрал механику линтеров и то, как работать с AST Go-проектов. Слава показал, что создание собственного правила — это не магия, а понятный и довольно увлекательный процесс. На стриме он:

  • написал простой, но полноценный линтер;

  • показал, как парсить AST и анализировать типы;

  • добавил своё правило и нашел проблемные конструкции в коде;

  • подключил линтер к golangci-lint.

Специально для вас мы сделали запись стрима, рекомендуем к просмотру всем, кому интересна тема линтеров на Go.

Запись стрима также есть на YouTube.

В ноябре Александр Кувакин, backend-инженер в команде Engineering Excellence AvitoTech, рассказывал в статье на Хабре о том, как backend-разработчикам выстраивать систему тестов на бэкенде. В тексте Саша разобрал основные проблемы и тесты, которые проверяют бизнес-логику. Почитать можно вот по этой ссылке.

А вот здесь вы найдете еще больше материалов по Go — статьи, видео, подкасты.

Теги:
Всего голосов 29: ↑29 и ↓0+31
Комментарии0

Представлен открытый проект Telegram Downloader, который умеет легально, быстро и легко скачивать любые файлы даже из защищённых каналов и чатов, где закрыта пересылка контента:

  • качает даже тяжёлые файлы за несколько секунд.

  • загрузки экспортируются в JSON-формат прямо на локальный диск.

  • работает локально — вся информация о загрузках будет только на локальном ПК.

  • не нарушает политику мессенджера.

Теги:
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

Обновили 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) с фокусом на инфраструктуру.

Что это даст:

  • закроет вопросы деплоя, мониторинга и интеграции брокеров сообщений;

  • фокус на практических навыках продакшн-разработки;

  • реальный опыт решения комплексной инфраструктурной задачи;

  • сокращение времени на выход в продакшн;

  • повышение надёжности систем: научитесь быстро выявлять и устранять проблемы;

  • все скилы для уверенной работы с микросервисами.

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии0

Узнавайте новое и бесплатно практикуйтесь в панели управления Selectel

Привет, Хабр! Обычно (хоть и не всегда) по пятницам я приношу подборки полезных материалов для начинающих специалистов. Но в этот раз у меня кое-что новое. Сегодня я расскажу не только о том, что почитать, но и как бесплатно отточить полученные знания, не тратя кровно заработанные на аренду IT-инфраструктуры.

При изучении полезных материалов вы можете запросить промокод на 500 бонусных рублей, чтобы попрактиковаться в панели управления бесплатно. Подробные условия и инструкции по получению бонусов находятся на страницах с подборками статей:

  • Go — практический гайд по работе с Go. С ним вы научитесь писать простые сервисы и использовать этот язык в некоторых рабочих задачах, а еще получите большую подборку материалов для погружения в тему.

  • Python — как настраивать инструменты, работать с базами данных, создавать программы с интерфейсом и использовать Python для парсинга. А еще интересные задачи для практики (вот тут-то точно пригодятся бонусы).

  • Расширения PostgreSQL — самые полезные с объяснением, как применять их без лишней теории.

  • Docker — что такое Docker, как запускать контейнеры, собирать образы и использовать Docker Compose. А еще — чем технология отличается от Kubernetes.

  • Сети — научитесь настраивать базовые сетевые схемы, поднимать выделенные и облачные серверы, разбираться в связанности, публичных IP и облачных маршрутизаторах.

Кстати, все статьи в подборках, как обычно, полностью бесплатны и доступны без регистрации и вот этого всего. Читайте, узнавайте новое и практикуйтесь бесплатно.

Теги:
Всего голосов 5: ↑4 и ↓1+6
Комментарии2

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. 

Регистрируйтесь, количество мест в офлайн ограничено.

Теги:
Рейтинг0
Комментарии0

Задача с system design interview как тема для пет проекта

Здравствуйте, уважаемые читатели. Интересуюсь микро сервисной архитектурой. Хотел бы написать серию статей, в которых поделюсь своим опытом создания пет проекта на микросервисах. Общее название - "Задача с system design interview как тема для пет проекта". В качестве задачи будет система сокращения ссылок. Хочу показать весь путь от реализации первой крайне упрощенной версии до полноценной версии с кешированием, базой данных и размещением на сервере. Система будет реализована на Golang. На Хабре уже есть статья с такой темой. Как Вы думаете нужны ли еще статьи по данной тематике?

Теги:
Всего голосов 3: ↑2 и ↓1+2
Комментарии0

Вышла новая версия 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

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Вышел 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

Теги:
Всего голосов 2: ↑2 и ↓0+3
Комментарии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

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Хеш-таблица с транзакциями на Go

Привет, продолжим удивительное. Смех смехом, но на Go стали доступны:

  1. Хеш-таблица с транзакциями.

  2. Структуры данных второго порядка.

И в отличие от 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<------------------

Вот, кстати, полный текст статьи, но там почти что невозможно обнаружить ссылку на исходники... Ага, не раз такое видел в комментариях!

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

Вышла новая версия пакета 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

Теги:
Рейтинг0
Комментарии0