Эта заметка будет очень короткой. Но надеюсь, она кому-то спасёт несколько часов жизни.У меня был код. К счастью, это было в тесте, а не в боевом коде, поэтому никто не пострадал.Код создавал http.Server, запускал две гороутинки для обслуживания входящих соединений:go func() { srvr.Serve(p) }() go func() { srvr.ServeTLS(e, "", "") }() Ну и дальше создавал клиента, делал к серверу обращения (HTTP GET) попеременно используя http и https ну и чего-т…
Карты (maps) в Go — это отличный инструмент для хранения данных в виде пар «ключ — значение». Они широко используются в разработке благодаря своей гибкости и удобству. Например, карты часто применяются для кэширования данных, хранения конфигураций или обработки больших объемов информации. Однако эффективная работа с картами требует понимания их внутреннего устройства и особенностей управления памятью. Под капотом карты реализованы на основе хеш-таблиц, что обеспечивает быстрый доступ к данным, …
Привет! Я ex. Разработчик из VK, сейчас принял оффер от Ozon'a, и за последний месяц я прошел собеседования в 4х бигтех компаниях: Ozon, Avito, Wildberries и T-Bank и везде дошел до финалов/офферов. Пообщавшись во многих группах, посвященных Go-разработке, я понял, что много умных ребят готовясь к собесам не имеют четкой системы подготовки, и из-за этого заваливают технические собесы в компании. Не претендуя на истину в последней инстанции, предлагаю свою методику подготовки к собесам, кото…
Если я говорю "самая удобная", значит в сложившемся годами подходе должны быть проблемы, и я их выделил и как-то решил. Давайте разбираться.Проблемы стандартного подхода к конфигурации в GoСтандартный подход к управлению конфигурацией в Go обычно выглядит примерно одинаково, будь то популярный viper, env или менее известные решения типа confita :Создаём структуру кофигурацииДля иерархичности конфигурации вкладываем одну структуру в другуюДобавляем теги на поля наших структур, как миниму…
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 — бинарный протокол, каждый фрей…
Tarantool Proxy — «умный посредник», который делает работу с кластером Tarantool надежнее, быстрее и проще, беря на себя рутинные задачи вроде балансировки и безопасности. Это компонент в архитектуре шардированного Tarantool, который нужно написать самому на основе библиотеки vshard. То есть это не standalone приложение из коробки. Заметим, что изначально основная библиотека Tarantool Proxy — vshard была написана на Lua, из-за чего для получения всех профитов от работы с ним нужна была специфич…
Мне всегда хотелось творить какую-нибудь дичь с консолями. Не знаю почему, но меня всегда привлекала идея реализовывать на устройствах неожиданные возможности. Это относится и к PlayStation 2, выпущенной Sony в 2000 году.Sony, пожалуйста, не подавайте в суд на меня за этот пост.Перейдём сразу к делу: я хочу научиться запускать код на консолях (подробнее о том, зачем это нужно, я расскажу в другом посте). Обычно это делается на языках низкого уровня, но сегодня мы можем проще и удобнее работать …
Привет, Хабр!Сегодня хочу поговорить о проблеме, которую многие недооценивают в своих Go‑проектах. Речь пойдет о бессрочном select {}, который легко может привести к блокировке, утечке ресурсов и деградации производительности.Что такое select {} без defaultВ языке Go select — это оператор, который позволяет конкурентно ждать операции на нескольких каналах. Когда какой‑либо канал становится доступным для чтения или записи, выбирается один из таких кейсов случайным образом.Простейший select {} бе…
Привет, Хабр! Я прочитал статью Migrating away from Rust и хочу поделиться с вами своими мыслями, заодно переведя оригинал. Я буду вести повествование от своего лица, поскольку это скорее реакция и размышления, а не традиционный перевод. Для меня тема весьма актуальна, так как я сам нахожусь в этом странном лагере разработки игр на нишевых движках. Я использую не Rust+Bevy, а Go+Ebitengine, но многие плюсы и минусы этих комбинаций интересно рассматривать как дополняющие друг друга. Когда-нибуд…