Обновить
181.97

Go *

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

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

Функциональное IT искусство

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели12K

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

И если всё это звучит как безумная смесь олдскула, низкоуровневой магии и настоящего инженерного кайфа? Вы правы! В статье я подробно рассказываю, как от студенческого мини приложения дошёл до своего кодека и p2p-звонилки, почему отказался от готовых решений, что пришлось invent-ить с нуля и какие открытия ждали на каждом шаге. Если хочется увидеть, как «а вдруг?» превращается в работающий проект, милости прошу внутрь.

Читать далее

Новости

glinq: LINQ для Go с ленивыми вычислениями

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели7.5K

Привет, Хабр! Я бэкенд-разработчик в спортивном медиа Спортс”. В этой статье расскажу о glinq – LINQ-подобном API для работы с коллекциями в Go. После появления дженериков в Go 1.18 стало возможным реализовать type-safe функциональные операции без рефлексии и дорогостоящих приведений типов.

Читать далее

(VLESS) VPN-клиент под Windows

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели26K

Недавно мне нужно было запустить VLESS-подписку под Windows, подружить её с рабочим VPN и всеми сопутствующими «прелестями». Попробовал v2rayN, Nekoray, Hiddify — и довольно быстро понял, что хочу написать собственный клиент.
Так появился singbox-launcher:
👉 https://github.com/Leadaxe/singbox-launcher

Ниже — немного подробностей, почему так и что получилось.

Читать далее

Лучше, чем JSON: почему я перешёл на Protobuf

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.8K

Команда Go for Devs подготовила перевод статьи о том, почему автор почти десять лет не использует JSON в своих API и предпочитает Protobuf. Он объясняет, как строгая типизация, компактная бинарная сериализация и генерация кода дают разработчикам больше надёжности и скорости.

Читать далее

Rust vs Go: управление памятью

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.6K

Давайте рассмотрим как управляют памятью два популярных языка программирования — Rust и Go.

Когда запускается программа, создается процесс с собственным адресным пространством и потоками, выполняющимися на ядрах. Процессор работает с виртуальной памятью — абстракцией, которой управляет операционная система.
Например в Go, когда мы создаем массив

Читать далее

Как я создал аналог западной обучающей платформы — Quaize

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели7.3K

Меня зовут Артём. Я — fullstack-разработчик уровня Middle, работаю с проектами на Python, JavaScript, Golang, Rust. В этой статье хочу рассказать о том, как я, подсмотрев западное приложение Kahoot, решил с нуля разработать собственную платформу для интерактивного обучения с огромным количеством ИИ-функций.

Читать далее

Так у вас статика вольюмами маунтится! И другие весёлые приключения в поисках нового Gateway на Go

Время на прочтение14 мин
Охват и читатели11K

Всем привет! Меня зовут Герман Кравец, я больше десяти лет в IT. В МойОфис работаю руководителем группы Календаря в отделе разработки Mailion — это наша отказоустойчивая корпоративная почта для крупного бизнеса.

В этой статье расскажу, как мы с командой искали новое решение для нашего API Gateway: зачем вообще понадобилось его менять, с какими проблемами столкнулись и как проходили все этапы — от первых «что-то идёт не так» до финального рефакторинга и запуска нового Gateway в прод.

Будет немного боли, немного архитектуры и чуть-чуть магии. Если вам интересно, как решать нетривиальные задачи в продуктовой разработке, где стоит использовать готовые решения, а где всё писать вручную, или просто хочется узнать, как мы сократили простои на регрессе с 4–6 часов до пары минут, — добро пожаловать под кат!

Читать далее

Как Temporal без боли решает привычную проблему распределённой бизнес-логики

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели12K

Меня зовут Миша, я бэкенд‑разработчик в платформе Яндекс Еды, и в этой статье я расскажу о принципах работы Temporal: почему мы его выбрали как основу нового процессинга, в чём его сильные стороны и как изменилась наша жизнь после перехода. 

Раньше для такого требовались: стейт‑машина с полудюжиной состояний, очереди и воркеры, обработчики на каждое событие и блокировки от race conditions. Теперь всё это описано в одной функции, которая вообще выглядит как псевдокод. 

Магия? Нет, Temporal. 

С тех пор как мы перенесли процессинг на Temporal, разработка существенно упростилась. Пользователь оплачивает заказ, ресторан его подтверждает и готовит, курьер забирает и привозит — ровно это и отражено в коде. Ну разве не прелесть?

Читать далее

Мониторинг в Linux на уровне ядра. Краткое практическое введение в eBPF+Cilium

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели9.1K

Добрый день, всем читающим данную статью. Недавно эксперементируя с eBPF для разработки нового функционала своей EDR для linux-серверов, я столкнулся с огромной проблемой: на просторах интернета есть огромный пласт статей по теории работы с eBPF, однако кратких практических статей как работать с BPF мной найдено не было.

Если быть более точным, то такие статьи есть, однако, они не дают понимания функционала.
В общем, в данной статье хотелось бы написать краткий гайд по работе с eBPF с уклоном в практику.

Читать далее

Эволюция Гофера: как нелепый грызун стал иконой Go

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели7.6K

Каждый язык программирования мечтает о своём символе. Кто-то рисует змей, слонов, кто-то выбирает чашки кофе… Но Go пошёл по другому пути и сделал своим лицом существо, которое выглядит так, будто родилось после скрещивания морской свинки, бобра и кролика. 😅

Я Дмитрий Буров – Golang-разработчик, автор Telegram-канала Go Advocate и лидер внутреннего Go-сообщества в Lamoda Tech.  Я хотел бы изложить историю создания Гофера (Gopher'a) – от идеи до финального образа который вы сейчас привыкли видеть.

Читать далее

Как прошёл Golang Meetup Wildberries & Russ

Уровень сложностиПростой
Время на прочтение1 мин
Охват и читатели4.3K

Привет, Хабр! 27 ноября обсудили на Golang Meetup Wildberries & Russ, как строить надёжную бизнес-логику, оптимизировать работу с памятью и проектировать масштабируемую событийную архитектуру. В статье делимся записями докладов.

Читать далее

Как устроен компилятор Go: сканер (лексер)

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели5.8K

Команда Go for Devs подготовила перевод статьи о том, как работает первый этап компиляции Go — сканер. Автор подробно показывает, как исходный код превращается в поток токенов, что происходит с каждым символом и откуда берётся автоматическая вставка точек с запятой. Если вы хотите понять Go «изнутри» — начинайте именно отсюда.

Читать далее

Анализ проекта VictoriaMetrics

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели6.2K

Всем привет! Мы давно и усердно работаем по направлению наблюдаемости и регулярно находим интересные статьи. Например, в этой вы узнаете подробности об устройства популярной системы хранения временных рядов — VictoriaMetrics. Перевод мы сделали специально для телеграм-канала Мониторим ИТ. Подписывайтесь! Там еще больше полезных постов о мониторинге.

VictoriaMetrics — это высокопроизводительная и масштабируемая база данных временных рядов и решение для мониторинга. VictoriaMetrics разработана для сбора, хранения и запроса больших объёмов данных временных рядов, что делает её идеальной для мониторинга инфраструктуры, приложений и IoT-устройств. Она поддерживает модели приёма данных как pull (сбор данных в стиле Prometheus), так и push (различные протоколы). Подробности под катом.

Читать далее

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

Симуляция воды для игр на Go: простая физика частиц

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели2.6K

Команда Go for Devs подготовила перевод статьи о том, как на Go и raylib-go построить лёгкую симуляцию воды на клеточном автомате. Автор шаг за шагом добавляет гравитацию, боковой поток, диагональное давление и препятствия — и в итоге получает частичную физику, больше похожую на «песочный» движок для 2D-игр.

Читать далее

Миссия выполнима: как мы добились актуальности двух тысяч кешей

Уровень сложностиСредний
Время на прочтение22 мин
Охват и читатели8.2K

Привет! Меня зовут Влад, и я разрабатываю сердце витрины Ozon — сервис product-facade. Пару лет назад мы уже делились нашим опытом в этой статье, но с тех пор многое изменилось: выросли нагрузки, появились новые фичи и оптимизации, система стала сложнее и надёжнее.

Прежде чем перейти непосредственно к актуальности кешей, давайте разберёмся, почему это так важно. Представьте: вы добавляете товар в корзину, но что-то пошло не так, и покупку совершить не удаётся — склад больше не возит в ваш ПВЗ. Даже 0.1% таких ошибок — это тысячи недовольных пользователей каждую секунду. А когда что-то массово меняется, разработчики вынуждены расследовать инцидент, чтобы понять, что проблема была всего лишь в устаревших кешах.

Читать далее

Monkey patching? В Go? Серьёзно? Или как писать тесты и не сойти сума

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели9.2K

На днях подходит ко мне коллега с вопросом: «Слушай, а как в Go сделать замену логики функции в тесте?»

Я уточняю, что он имеет в виду. А он такой: «Ну, хочу monkey patching, чтобы подменять функции из коробки. Типа time.Now возвращала фиксированное время, uuid.New конкретный ID. Чтобы удобно тестироваться».

И тут я, конечно, немного завис :D

Да, технически в Go есть способы делать monkey patching (еще и есть библиотека) через unsafe, через подмену указателей на функции в рантайме. Но это настолько хрупкое и непредсказуемое решение, что я бы не советовал тащить его в продакшен-код. Особенно когда есть нормальный, идиоматичный способ решить эту задачу.

Читать далее

Floxy — лёгкий Saga Workflow Engine на Go

Уровень сложностиСредний
Время на прочтение21 мин
Охват и читатели6K

Когда бизнес-логика обработчика запроса выходит за рамки одной транзакции, код быстро обрастает ручными откатами и сложной оркестрацией. Большие системы вроде Temporal решают эту проблему, но требуют собственной инфраструктуры и сложного деплоя — не всегда возможного, особенно в коробочных решениях. Floxy предлагает другой путь: лёгкий встраиваемый Saga-движок на Go, реализующий оркестрацию и компенсации без внешних сервисов, брокеров и YAML DSL для вашего приложения — только чистый Go и PostgreSQL.

Читать далее

Современный подход к предотвращению CSRF/CORF-атак в Go

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.3K

Команда Go for Devs подготовила перевод статьи о новом подходе к защите Go-приложений от CSRF/CORF-атак. Автор разбирает, как связка TLS 1.3, SameSite cookies и http.CrossOriginProtection из стандартной библиотеки позволяют отказаться от токенов — но только если соблюдены важные условия. Насколько безопасен такой подход? Разбираемся.

Читать далее

Забавный парадокс отправки в канал в Go

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели8.6K

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

(UPD - нет не единственный, смотри примечание в конце - код более похожий на то что можно встретить в жизни)

Читать далее

quic-test: открытый инструмент для тестирования QUIC, BBRv3 и FEC в реальных условиях

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели8.8K

Можно использовать iperf3, но он про TCP и базовый UDP. Можно взять отдельные QUIC-библиотеки, но без визуализации и нагрузки. Можно написать кастомные симуляторы, но они не отражают реального поведения каналов. Хочешь проверить, как BBRv3 ведет себя на трассе Москва — Новосибирск? Пожалуйста, найди три сервера в разных дата-центрах, настрой netem, собери метрики вручную и надейся, что результаты будут воспроизводимы.

Читать далее
1
23 ...

Вклад авторов