Category : golang

golang
Когда слайсы начинают расти

ВведениеЯ не применяю Go в коммерческой разработке, я недавно начал изучать и применять этот язык для пет-проектов и разного рода опытов. В этой статье речь пойдёт о слайсах. Пример, который мы будем рассматривать, мне показал коллега, за что ему большое спасибо. Что такое "слайс"?Говоря простым языком, слайсы — это надстройка, интерфейс над массивами, который позволяет нам более гибко с ними работать. Мы можем работать со слайсом как с динамическим массивом: добавлять или удалять элем…

  • пятница, 17 января 2025 г. в 00:00:15
golang
Нетипизированные константы. От ошибки в учебнике к глубокому пониманию Go

Всем привет! Сегодня расскажем, как пример с ошибкой из учебника по языку Go вызвал любопытство у бывшего стажера «Автомакона» (и нынешнего программиста) Олега Самсонова и к чему это привело.Путь в IT — это всегда погружение в огромный массив информации, изучение примеров и поиски ответов на вопросы «почему так» и «как это работает». Особенно на старте карьеры важно не только поглощать знания, но и ставить под сомнение их источники, ведь именно так мы лучше понимаем, как работает весь механизм.…

  • пятница, 17 января 2025 г. в 00:00:14
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