Go in Action – Telegram
Go in Action
4.29K subscribers
2.39K photos
3 videos
3.81K links
Всё про язык программирования Go на русском и английском языке

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

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

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


Читать: https://habr.com/ru/articles/970270/

#ru

@go_in_action | Другие наши каналы
Забавный парадокс отправки в канал в Go

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


Читать: https://habr.com/ru/articles/970304/

#ru

@go_in_action | Другие наши каналы
Современный подход к предотвращению CSRF/CORF-атак в Go

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


Читать: https://habr.com/ru/articles/968132/

#ru

@go_in_action | Другие наши каналы
2
Floxy — лёгкий Saga Workflow Engine на Go

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


Читать: https://habr.com/ru/articles/970732/

#ru

@go_in_action | Другие наши каналы
👍1
Как наткнуться на Data Race в Go

Перевод статьи "A million ways to die from a data race in Go" от Philippe Gaultier, которую он опубликовал в личном блоге. Предполагается, что изложенный материал будет полезен разработчикам, уже имеющим какой-то практический опыт работы с Go.


Читать: https://habr.com/ru/companies/vk/articles/970670/

#ru

@go_in_action | Другие наши каналы
👀2
Как наткнуться на Data Race в Go

Перевод статьи "A million ways to die from a data race in Go" от Philippe Gaultier, которую он опубликовал в личном блоге. Предполагается, что изложенный материал будет полезен разработчикам, уже имеющим какой-то практический опыт работы с Go.


Читать: https://habr.com/ru/articles/970670/

#ru

@go_in_action | Другие наши каналы
👀1
Monkey patching? В Go? Серьёзно? Или ка писать тесты и не сойти сума

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

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

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

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


Читать: https://habr.com/ru/articles/971190/

#ru

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

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

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


Читать: https://habr.com/ru/companies/ozontech/articles/971296/

#ru

@go_in_action | Другие наши каналы
👍31
Симуляция воды для игр на Go: простая физика частиц

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


Читать: https://habr.com/ru/articles/968084/

#ru

@go_in_action | Другие наши каналы
🔥2
Как устроен компилятор Go: сканер (лексер)

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


Читать: https://habr.com/ru/articles/971348/

#ru

@go_in_action | Другие наши каналы
🔥1
Эволюция Гофера: как нелепый грызун стал иконой Go

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

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


Читать: https://habr.com/ru/companies/lamoda/articles/966768/

#ru

@go_in_action | Другие наши каналы
Мониторинг в Linux на уровне ядра. Краткое практическое введение в eBPF+Cilium

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


Читать: https://habr.com/ru/articles/972602/

#ru

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

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

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

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

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


Читать: https://habr.com/ru/companies/yandex/articles/972612/

#ru

@go_in_action | Другие наши каналы
👍1
Так у вас статика вольюмами маунтится! И другие весёлые приключения в поисках нового Gateway

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

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

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


Читать: https://habr.com/ru/companies/ncloudtech/articles/965576/

#ru

@go_in_action | Другие наши каналы
1
Как я создал аналог западной обучающей платформы — Quaize

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


Читать: https://habr.com/ru/articles/973478/

#ru

@go_in_action | Другие наши каналы
Rust vs Go: управление памятью

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

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


Читать: https://habr.com/ru/articles/973550/

#ru

@go_in_action | Другие наши каналы
💊2🔥1🌚1
Лучше, чем JSON: почему я перешёл на Protobuf

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


Читать: https://habr.com/ru/articles/973400/

#ru

@go_in_action | Другие наши каналы
(VLESS) VPN-клиент под Windows

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

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


Читать: https://habr.com/ru/articles/973754/

#ru

@go_in_action | Другие наши каналы
🔥3👎2
glinq: LINQ для Go с ленивыми вычислениями

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


Читать: https://habr.com/ru/articles/973828/

#ru

@go_in_action | Другие наши каналы
🔥1🤯1
Функциональное IT искусство

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

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


Читать: https://habr.com/ru/articles/973868/

#ru

@go_in_action | Другие наши каналы