Category : golang

golang
Забитый канал — как вы с ним поступаете в Go?

Разработчики языка Go подбросили программистам занятную дилемму - в виде фиксированного размера буфера у каналов (тех что используются для передачи сообщений между потоками - точнее "go-рутинами" приложения). На днях на ревью увидел у коллеги код в духе:хотим оповещать "подписчиков" об изменениях в БД, асинхронноиспользуем для этого канал с буфером какой-то вместимости (например, 50)когда вызывается коллбэк от БД, мы создаём информационное сообщение и пытаемся затолкать его в ка…

  • среда, 15 января 2025 г. в 00:00:12
golang
Пишем ping на Go: сможем ли составить конкуренцию стандартному ping?

Всем привет! Меня зовут Игорь Горбунов, я разрабатываю платформу базовой станции в YADRO и изучаю Golang почти год. Уже перевалил рубеж «вывести на экран сумму четных элементов среза» и захотел написать что-то более сложное.Я интересуюсь сетями, и решил посмотреть, как в Go реализуется работа с протоколами ICMP и ICMPv6. Наиболее простая задача, связанная с ними, — реализация программы ping. Она отправляет указанному узлу сети запросы ICMP типа Echo-Request и ожидает ответы типа Echo-Reply.На п…

  • среда, 15 января 2025 г. в 00:00:11
golang
К слову об именах переменных в Go

Субботним утречком решил поговорить о кое-чем действительно важном. Управление памятью, сборщик мусора — это всё недостойная обсуждения фигня. Имена переменных — вот это действительно стоящая тема. Не вижу, почему бы трем благородным донам её не обсудить.Для тех, кто пишет на Go давно, изложенное ниже может показаться очевидным, но буду рад вашим комментам (панамку за некоторую сумбурность изложения приготовил).Одной из ключевых особенностей Go является ориентация на читаемость и краткость кода…

  • воскресенье, 12 января 2025 г. в 00:00:10
golang
Импорт из Jira: перенос с запахом карри

Привет, Хабр!Меня зовут Егор, я руководитель разработки таск-менеджера. В комментах к прошлой статье были вопросы про экспорт из Jira на наш аналог, так что мы решили поделиться своим опытом решения проблем, с которыми на этой пути сталкивается идущий. Пойдем по пунктам: проблема – решение. Эта статья может быть интересна тем, кто сейчас в поисках рабочих костылей, а еще – тем, кто уже решил проблему экспорта по-своему.Получение пользователей с доступом к проектуНачнем с того, что у Джиры в при…

  • пятница, 10 января 2025 г. в 00:00:05
golang
Реализация Paxos на Go: создаем алгоритм консенсуса без готовых решений

Привет, Хабр!Paxos — это алгоритм, который позволяет нескольким узлам прийти к единому мнению, даже если не все из них работают идеально. Даже если один или два узла оказываются недоступными, Paxos всё равно помогает согласовать решение, а остальным — узнать о том, что вообще было принято.Вот такие вещи — согласование, отказоустойчивость, выбор лидера — по сути, и составляют ядро распределённых систем. Они позволяют избежать катастроф.Основы PaxosЗадача Paxos — получить согласие всех участников…

  • среда, 8 января 2025 г. в 00:00:06
golang
Пишем медленный код на Go

Почему Вы должны оптимизировать читаемость, а не производительностьПодождите, что? Медленный код? Разве мы не должны беспокоиться об ускорении наших Go‑программ?На самом деле, нет. Оптимизация кода на Golang ради производительности — это попросту трата времени, и вот почему:Производительность в большинстве случаев не имеет значенияGo и так быстрыйЧитаемость важнее скоростиЭти аргументы нуждаются в объяснении, и я его дам. Для них есть исключения, как, собственно говоря, для всех нетривиальных у…

  • понедельник, 6 января 2025 г. в 00:00:08
golang
Генерация PDF-файлов на Go

Генерация PDF-документов это практически неотъемлемая часть при создании отчетов. Ведь гораздо проще иметь один HTML-шаблон который просто редактируется, и в нужные места подставить необходимые данные.В статье отобрал самые популярные (по звездам на GitHub на момент написания статьи) инструменты для генерирования PDF из HTML, DOCX и некоторых других форматов. Рассмотрим только те, которые реализованы непосредственно на Go ИЛИ имеют обертки над API на Go.Список следующий: https://github.com/go-…

  • суббота, 4 января 2025 г. в 00:00:03
golang
ErrorHandling-патерн в golang

Обработка и передача ошибок в конкурентном коде имеет некоторые особенности. Поскольку решении о запуске подзадачи(или подзадач) принимается вне запущенной горутины, центр обработки информации(в данном случае ошибки) должен находится в другом месте. Это может быть часть кода инициирующая запуск горутин(родительская горутина) и ожидающая результатов ее выполнения или отдельная горутина, запущенная для этих целей.Будем отталкиваться от примера, где мы ожидаем результатов выполнения n-горутин. Рез…

  • суббота, 4 января 2025 г. в 00:00:02
golang
Ory Kratos — конструктор для сборки цифрового продукта любой сложности

Привет! Я Андрей Баронский, бэкенд-тимлид в KTS.Одно из ключевых направлений деятельности нашей компании — это аутсорс-разработка цифровых продуктов. При создании очередной системы мы хотим уделять больше времени и сил необходимым фичам для клиентов, а не настройке рутинного взаимодействия с юзерами, и для ускорения проработки основных пользовательских сценариев мы используем технологию Ory Kratos. В статье я расскажу, почему я рекомендую обратить на нее внимание и как с ней работать.Для тех, к…

  • вторник, 31 декабря 2024 г. в 00:00:07