ВведениеЯ не применяю Go в коммерческой разработке, я недавно начал изучать и применять этот язык для пет-проектов и разного рода опытов. В этой статье речь пойдёт о слайсах. Пример, который мы будем рассматривать, мне показал коллега, за что ему большое спасибо. Что такое "слайс"?Говоря простым языком, слайсы — это надстройка, интерфейс над массивами, который позволяет нам более гибко с ними работать. Мы можем работать со слайсом как с динамическим массивом: добавлять или удалять элем…
Всем привет! Сегодня расскажем, как пример с ошибкой из учебника по языку Go вызвал любопытство у бывшего стажера «Автомакона» (и нынешнего программиста) Олега Самсонова и к чему это привело.Путь в IT — это всегда погружение в огромный массив информации, изучение примеров и поиски ответов на вопросы «почему так» и «как это работает». Особенно на старте карьеры важно не только поглощать знания, но и ставить под сомнение их источники, ведь именно так мы лучше понимаем, как работает весь механизм.…
Разработчики языка Go подбросили программистам занятную дилемму - в виде фиксированного размера буфера у каналов (тех что используются для передачи сообщений между потоками - точнее "go-рутинами" приложения). На днях на ревью увидел у коллеги код в духе:хотим оповещать "подписчиков" об изменениях в БД, асинхронноиспользуем для этого канал с буфером какой-то вместимости (например, 50)когда вызывается коллбэк от БД, мы создаём информационное сообщение и пытаемся затолкать его в ка…
Всем привет! Меня зовут Игорь Горбунов, я разрабатываю платформу базовой станции в YADRO и изучаю Golang почти год. Уже перевалил рубеж «вывести на экран сумму четных элементов среза» и захотел написать что-то более сложное.Я интересуюсь сетями, и решил посмотреть, как в Go реализуется работа с протоколами ICMP и ICMPv6. Наиболее простая задача, связанная с ними, — реализация программы ping. Она отправляет указанному узлу сети запросы ICMP типа Echo-Request и ожидает ответы типа Echo-Reply.На п…
Субботним утречком решил поговорить о кое-чем действительно важном. Управление памятью, сборщик мусора — это всё недостойная обсуждения фигня. Имена переменных — вот это действительно стоящая тема. Не вижу, почему бы трем благородным донам её не обсудить.Для тех, кто пишет на Go давно, изложенное ниже может показаться очевидным, но буду рад вашим комментам (панамку за некоторую сумбурность изложения приготовил).Одной из ключевых особенностей Go является ориентация на читаемость и краткость кода…
Привет, Хабр!Меня зовут Егор, я руководитель разработки таск-менеджера. В комментах к прошлой статье были вопросы про экспорт из Jira на наш аналог, так что мы решили поделиться своим опытом решения проблем, с которыми на этой пути сталкивается идущий. Пойдем по пунктам: проблема – решение. Эта статья может быть интересна тем, кто сейчас в поисках рабочих костылей, а еще – тем, кто уже решил проблему экспорта по-своему.Получение пользователей с доступом к проектуНачнем с того, что у Джиры в при…
Привет, Хабр!Paxos — это алгоритм, который позволяет нескольким узлам прийти к единому мнению, даже если не все из них работают идеально. Даже если один или два узла оказываются недоступными, Paxos всё равно помогает согласовать решение, а остальным — узнать о том, что вообще было принято.Вот такие вещи — согласование, отказоустойчивость, выбор лидера — по сути, и составляют ядро распределённых систем. Они позволяют избежать катастроф.Основы PaxosЗадача Paxos — получить согласие всех участников…
Почему Вы должны оптимизировать читаемость, а не производительностьПодождите, что? Медленный код? Разве мы не должны беспокоиться об ускорении наших Go‑программ?На самом деле, нет. Оптимизация кода на Golang ради производительности — это попросту трата времени, и вот почему:Производительность в большинстве случаев не имеет значенияGo и так быстрыйЧитаемость важнее скоростиЭти аргументы нуждаются в объяснении, и я его дам. Для них есть исключения, как, собственно говоря, для всех нетривиальных у…
Генерация PDF-документов это практически неотъемлемая часть при создании отчетов. Ведь гораздо проще иметь один HTML-шаблон который просто редактируется, и в нужные места подставить необходимые данные.В статье отобрал самые популярные (по звездам на GitHub на момент написания статьи) инструменты для генерирования PDF из HTML, DOCX и некоторых других форматов. Рассмотрим только те, которые реализованы непосредственно на Go ИЛИ имеют обертки над API на Go.Список следующий: https://github.com/go-…