Category : golang

golang
HTTP/2 / HTTP/3 и gRPC на Rust: пишем учебный Mini-Transport

Rust GO!Обновлено: пример полностью собирается на stable Rust (edition 2024) с актуальными версиями крейтов: bytes, anyhow, tokioquinn,rcgen иrustls.Что сделаемРазберёмся, как фреймируются HTTP/2 и HTTP/3 (QUIC).Напишем крошечный мини-фреймворк «Mini-Transport» (≈600 строк) на Rust:• чтение/запись HTTP/2-фреймов,• gRPC-кодек (без protobuf-codegen),• переход на QUIC.Соберём рабочий echo-пример: клиент шлёт «hello», сервер отвечает «world».1 | Базовая теорияHTTP/2 — бинарный протокол, каждый фрей…

  • пятница, 2 мая 2025 г. в 00:00:07
golang
Минус Lua, плюс перформанс: как толстый клиент на Go сделал работу с Tarantool эффективнее

Tarantool Proxy — «умный посредник», который делает работу с кластером Tarantool надежнее, быстрее и проще, беря на себя рутинные задачи вроде балансировки и безопасности. Это компонент в архитектуре шардированного Tarantool, который нужно написать самому на основе библиотеки vshard. То есть это не standalone приложение из коробки. Заметим, что изначально основная библиотека Tarantool Proxy — vshard была написана на Lua, из-за чего для получения всех профитов от работы с ним нужна была специфич…

  • четверг, 1 мая 2025 г. в 00:00:06
golang
Golang на PlayStation 2

Мне всегда хотелось творить какую-нибудь дичь с консолями. Не знаю почему, но меня всегда привлекала идея реализовывать на устройствах неожиданные возможности. Это относится и к PlayStation 2, выпущенной Sony в 2000 году.Sony, пожалуйста, не подавайте в суд на меня за этот пост.Перейдём сразу к делу: я хочу научиться запускать код на консолях (подробнее о том, зачем это нужно, я расскажу в другом посте). Обычно это делается на языках низкого уровня, но сегодня мы можем проще и удобнее работать …

  • четверг, 1 мая 2025 г. в 00:00:05
golang
Golang: почему select {} без default может убить ваше приложение

Привет, Хабр!Сегодня хочу поговорить о проблеме, которую многие недооценивают в своих Go‑проектах. Речь пойдет о бессрочном select {}, который легко может привести к блокировке, утечке ресурсов и деградации производительности.Что такое select {} без defaultВ языке Go select — это оператор, который позволяет конкурентно ждать операции на нескольких каналах. Когда какой‑либо канал становится доступным для чтения или записи, выбирается один из таких кейсов случайным образом.Простейший select {} бе…

  • среда, 30 апреля 2025 г. в 00:00:09
golang
Миграция с Bevy на Unity

Привет, Хабр! Я прочитал статью Migrating away from Rust и хочу поделиться с вами своими мыслями, заодно переведя оригинал. Я буду вести повествование от своего лица, поскольку это скорее реакция и размышления, а не традиционный перевод. Для меня тема весьма актуальна, так как я сам нахожусь в этом странном лагере разработки игр на нишевых движках. Я использую не Rust+Bevy, а Go+Ebitengine, но многие плюсы и минусы этих комбинаций интересно рассматривать как дополняющие друг друга. Когда-нибуд…

  • среда, 30 апреля 2025 г. в 00:00:08
golang
Advanced Goroutines Patterns в Go: Fan-out, Fan-in и Pipelines

В языке Go одним из важнейших преимуществ является мощная поддержка многопоточности и параллелизма за счёт горутин и каналов. В этой статье подробно разберём три продвинутых шаблона работы с горутинами:Fan-outFan-inPipelinesЭти паттерны позволяют писать эффективный, масштабируемый и читабельный многопоточный код.0. Как работают горутины под капотом в GO langВ примере Fan-out из статьи, распределение работы происходит следующим образом:Общий канал (jobs) используется как единая очередь задач, ку…

  • вторник, 29 апреля 2025 г. в 00:00:08
golang
Почему Big Tech тихонько уходит от Go

Хочу сразу пояснить, что я лично пишу на Go уже около 10 лет и уходить от него не планирую. Но тем не менее мне интересно мнение других разработчиков, которые работают или работали с Go на больших проектах. Во многом я согласен с недостатками Go, описанными ниже, так как сам сталкиваюсь с этими проблемами и на не самых больших проектах. Вот мой перевод статьи.1. Простота Go не справляется со сложностьюГлавное достоинство Go — его простота. Отсутствие сложных функций, сюрпризов и магии. Для небо…

  • вторник, 29 апреля 2025 г. в 00:00:07
golang
Ошибки в Go: Обработка, Обертки и Лучшие Практики

Go предлагает уникальный и прямолинейный подход к обработке ошибок, отличающийся от try-catch в других языках. Он основан на явной проверке возвращаемых значений, что требует больших проверок, но ведет к более надежному коду. Рассмотрим основы, современные инструменты пакета errors и лучшие практики. Если вам интересен процесс и вы хотите следить за дальнейшими материалами, буду признателен за подписку на мой телеграм-канал. Там я публикую полезныe материалы по разработке, Go, советы как быть …

  • понедельник, 28 апреля 2025 г. в 00:00:11
golang
Go defer: что не сказали в книгах

defer в Go — это мощный механизм для очистки ресурсов, закрытия файлов и разблокировки мьютексов. Вы наверняка слышали, что defer делает код чище и безопаснее.Когда вы открываете файл через os.Open() или os.Create(), Go выделяет ресурс операционной системы — дескриптор файла.И вот в чём важный момент:Этот дескриптор нужно обязательно закрыть через file.Close().Иначе файл останется "висеть" открытым — ресурсы будут утекать, программа начнёт захлёбываться или упадёт.Мьютекс (mutex = MUTua…

  • понедельник, 28 апреля 2025 г. в 00:00:10