Обновить
106.54

Go *

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

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

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

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

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

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

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

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

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

Теги:
+4
Комментарии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.

Теги:
+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 проектах.

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

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

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

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

Теги:
+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 — статьи, видео, подкасты.

Теги:
Всего голосов 28: ↑28 и ↓0+28
Комментарии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 и облачных маршрутизаторах.

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

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

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

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

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, теперь вы знаете: проблема признана и исправление уже в пути.

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

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

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