Обновить
256K+

Go *

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

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

Один вход для всех: как мы строили Gateway и выходили из хаоса nginx + Lua

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

Всем привет, меня зовут Кирилл Вересников, я бэкенд-разработчик в iSpring.

Мы делаем iSpring LMS — платформу для корпоративного онлайн-обучения. Исторически это был модульный монолит на PHP, а затем система начала постепенно дополняться микросервисами. Самые нагруженные и часто меняющиеся части мы выносили из монолита, а новый функционал всё чаще сразу делали в микросервисах.

Эта статья будет полезна тем, кто:

- постепенно выносит части монолита в сервисы;

- устал от старых nginx-конфигов, которые годами копились ради обратной совместимости;

- ищет способ стандартизировать входной трафик и убрать бизнес-логику из прокси;

- выбирает между nginx и envoy.

Читать далее

Новости

Lionheart: как я спрятал SOCKS5-туннель внутри видеоконференции Wildberries

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

Написал SOCKS5-прокси на Go, который прячет трафик внутри WebRTC TURN-сессий WB Stream — видеоплатформы Wildberries. Отреверсил их HTTP API, выяснил что под капотом LiveKit, написал минимальный protobuf-парсер чтобы вытащить ICE-серверы из JoinResponse, и прокинул KCP-соединение с VPS через чужой TURN-relay. В посте — полный разбор с кодом: от первого HTTP-запроса до момента, когда google.com открывается через видеоконференцию Wildberries.

Читать далее

Разбираем подводные камни, ошибки и лучшие практики при разработке Kubernetes-операторов. Часть 3

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

Привет! Это снова Стас Иванкевич, техлид в команде разработки управляющего слоя Platform V DropApp в СберТехе. Наши операторы продолжают бороздить просторы K8s, а инсталляторы — разворачивать новые кластеры, и мы готовы поделиться с вами новыми полезностями.

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

Читать далее

Новый народный мессенджер России. Можно, а зачем?

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

Telegram практически заблокирован. Max — официальный, удобный, но его не хотят ставить даже те, кто в курсе, что именно VK-экосистема уже хранит половину их цифровой жизни. В этом зазоре появляется вопрос: а нужен ли вообще «свой» мессенджер, и если да — каким он должен быть? Я попробовал ответить не словами, а кодом.

Читать далее

Go, TUN и UDP: пишем сетевой relay с гибкой конфигурацией

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

Продолжаю пилить на Go утилиту для работы с TUN-интерфейсами. В предыдущей версии пакеты проходили путь system <-> tun10 <-> go app <-> tun11 <-> inet. Основная цель тогда была одна — разобраться с TUN-интерфейсами и сетевыми настройками. В текущей версии я добавил простейший udp relay, вынес сложность в конфиг и в целом переработал проект.

Читать далее

Как воспроизводить WebRTC видео на Qt клиенте

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

Что ж... Недавно я увлекся C++, поэтому давайте разберемся в какой-нибудь технологии и напишем по ней статью. Мой выбор пал на WebRTC и клиент на Qt.

Читать далее

Приключения с Go и YDB Serverless: как я уложился в бесплатный тир Yandex Cloud после Spring Boot и PostgreSQL

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

Долгое время я пытался научиться слепому десятипальцевому методу печати, но всегда это заканчивалось поражением. Учился на Keybr — на нём освоил английский. Частотный метод, когда ты печатаешь настоящие слова из самых частых букв, мне подошёл. Но столкнулся с тем, что заглавные буквы, пунктуация и цифры спрятаны за кучей настроек. Подумал — зачем это прятать, если можно сделать структурированные этапы и дать чёткий путь прохождения? Так я начал разработку TypeStep — тренажёра слепой печати с частотным методом и этапами прохождения. А теперь — про то, на чём это всё построено и с чем пришлось столкнуться.

Читать далее

Headless CMS на Go — самая минималистичная система управления сайтом

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

Когда очередной лендинг требует «просто принимать заявки и показывать новости», разработчик оказывается перед выбором: поднять Laravel/Django с кучей зависимостей, купить SaaS-подписку, или написать что-то своё. Я выбрал третий путь — и это оказалось интереснее, чем я ожидал.

В этой статье разбираю архитектурные решения, которые принял при написании LightHeadless — минималистичного headless CMS на Go.

Читать далее

Ударим автопробегом по галактическому бездорожью и разгильдяйству

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

или как уместить Вселенную в iPhone, не привлекая внимания санитаров

Разработчики — люди в целом неплохие, но с одной странностью: когда задача кажется им большой, они добавляют слой. Потом ещё слой. Потом, в три часа ночи, смотрят на то, что получилось, и долго молчат.

Автор проекта «ЭХО» взял и убрал всё лишнее. Без предупреждения, без RFC, без голосования в команде. Остался минимальный Linux, один бинарник на Go и файловая система — всё остальное полетело в мусор вместе с базами данных, фреймворками и «чёрными ящиками» с гарантией на три года. Получилась система на 250 миллионов анкет, которая работает на обычном пользовательском компьютере и не требует звонить в поддержку AWS в два часа ночи.

Но 250 миллионов — это как-то мелко, правда? Давайте замахнёмся на Вселенную. Ну или хотя бы на Млечный Путь для начала.

Читать далее

Безопасный file upload в Go: 7 атак на загрузку файлов и как мы их закрывали

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

«Сделай форму загрузки PDF» – звучит как задача на полчаса. Claude/GPT напишет handler, мы добавим accept=".pdf" на фронте, multer на бэке – и вот у нас работающий upload. Можно деплоить.

Проблема в том, что работающий upload и безопасный upload – это разные вещи. Разница между ними – несколько уязвимостей, каждая из которых может превратить ваш сервер в точку входа для атакующего.

С распространением LLM-инструментов порог входа в разработку снизился радикально. Это прекрасно – больше людей могут создавать продукты. Но вместе с порогом входа снизился и порог входа для уязвимостей. Когда LLM генерирует код загрузки файла, она решает функциональную задачу: принять файл, сохранить, обработать. Безопасность? «Добавлю потом». А «потом» обычно наступает после инцидента.

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

Читать далее

Новый слабо централизованный мессенджер с E2E-шифрованием и групповыми чатами, написанный на Go при помощи Fyne

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

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

Читать далее

Как я проверяю архитектурное мышление на собеседованиях одной задачей

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

Всем привет!

Недавно мне нужно было нанять людей в команду по созданию системы на Python, Java, Go. Для меня крайне важны соблюдения принципов SOLID, Чистой архитектуры, Чистого кода.

Я придумал задачу, которую спрашиваю на собеседованиях в свою команду. И мне хочется поделится ею с вами.

Надеюсь, она будет вам полезна!

Читать далее

Go и искусство ставить подножку разработчику: разоблачение

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

Язык проектировался простым, лёгким в освоении, готовым для написания сервисов с первого дня. Он мог бы таким и остаться, если бы не одна проблема. Проблема отбора.

Инженеры Google понимали, что без подводных камней, необходимости знать детали реализации языка и неконсистентного синтаксиса не о чем будет спрашивать на собеседовании.

Явно ставилась задача — сделать язык достаточно простым, но не настолько, чтобы собеседование мог пройти любой новичок.

Узнай тайны

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

Как перестать наступать на грабли в Go: набор рабочих рецептов

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

Пишете на Go или только начинаете изучать язык? Эта шпаргалка точно сэкономит вам кучу времени. Никакой воды, абстрактных рассуждений и скучных введений. Мы пройдёмся по тем самым ситуациям, с которыми бэкендеры сталкиваются на каждом проекте: конкурентность, сеть, работа с JSON, обработка ошибок, тесты и дебаг.

Можете смело добавлять это в закладки. Забыли синтаксис или паттерн, открыли нужный раздел, скопировали, адаптировали и поехали дальше.

Читать далее

Некоторые мысли о проектировании библиотек (с примерами на Go)

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

Программисты много пользуются библиотеками. Но спроектировать библиотеку сложно. В этой статье я изложу некоторые соображения по поводу того, как создавать библиотеки.

Для начала разграничим, чем нам приходится заниматься при программировании. Попробуем представить акты программирования как беседы. Далее разберём, какие основные виды деятельности складываются в «программирование», как его принято понимать. Всё это послужит нам основой для разработки более качественных программных библиотек.

Читать далее

Разбираем net/http на практике. Часть 2.3: Динамические маршруты, cookie-аутентификация и управление доступом

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

В этой статье цикла мы решим главную проблему сервиса DeadDrop: пользователь создаёт секрет, но не может его забрать.

Здесь мы:

1) Научим net/http понимать динамические маршруты без фреймворков
2) Научимся подписывать куки через HMAC и узнаем, как оно работает изнутри
3) Настроим безопасное скачивание файлов

Никаких готовых решений - лишь стандартная библиотека, которая никуда не пропадёт и не развалится за месяц!

Сегодня сервис DeadDrop станет полноценным веб-приложением - покрываем все функции, заявленные в первой статье

Читать далее

Тоталитарный Golang

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

Легковесные треды есть и в Java, скорость — в Rust, микросервисы можно делать на чём угодно. Так почему Go? Потому что он не даёт вам писать красиво.

Читать далее

Как быстро встроить MAX в свои системы

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

MAX в России постепенно превращается не просто в «ещё один мессенджер», а в канал, который всё чаще рассматривают как рабочую точку контакта с пользователем: для уведомлений, сервисных сообщений, внутренних ботов и групповых сценариев. И как только компания доходит до реальной интеграции, почти всегда начинается знакомая история: сначала один скрипт на отправку уведомлений, потом второй на обработку входящих сообщений, потом отдельная логика для групп, потом ещё пара «временных» костылей. Через месяц это уже не интеграция, а набор хрупких связок, которые страшно трогать.

Именно эту проблему и решает max.botservice: один сервис, который закрывает сразу несколько задач. Он принимает события из MAX, умеет работать как бот в личных сообщениях и группах, хранит контакты, отдает HTTP API для внешних систем и позволяет использовать MAX как полноценный канал уведомлений без необходимости плодить десяток вспомогательных утилит.

Исходный код:https://github.com/DmitryBoyko/max-bot/tree/main

Читать далее

Когда нейросети общаются сами: эксперимент с диалогом двух LLM и графическая утилита на Go

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

Всем привет! Что будет, если задать двум LLM моделям одну тему и позволить вести диалог без участия человека? Я написал небольшую программу на Go, которая делает это автоматически. Рассказываю как она устроена и почему она может пригодиться каждому, кто работает с Ollama.

Читать далее

Паттерны конкурентности в Go. Подробный разбор. Часть 2. Fan-Out/Fan-In

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

Пример паттерна Fan-Out/Fan-In на Go с подробным описанием кода. Пример подходит для знакомства с паттерном в процессе обучения, собеседования, но не является шаблоном для production кода.

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