Тонкая настройка параллелизма в тестах GoВ Go есть три способа управления параллельностью тестов:Флаг -pФлаг -parallelВызов функции t.Parallel()Но многие ли понимают, как они работают? И зачем нам все три?Оказывается:-p управляет числом тестовых пакетов, выполняемых параллельно.-parallel определяет количество тестовых функций внутри одного пакета, выполняемых параллельно.t.Parallel() помечает тестовую функцию, разрешая Go выполнять её параллельно с другими тестами в том же пакете.Пример 1Допуст…
Мастерство конкурентности в Go: Механика горутин и каналов Паттерн генератор (вы туть)Паттерн конвейер (оригинал) Fan-in Fan-out (оригинал)Итак вторая часть продолжаем. Теперь давайте посмотрим, как эти примитивы объединяются, образуя мощные шаблоны, которые решают реальные проблемы.В этой статье мы рассмотрим генератор и попытаемся визуализировать его. Итак, давайте подготовимся, поскольку весь процесс пройдем с примерами.ГенераторГенератор как фонтан, который непрерывно производит значения, к…
ВступлениеВсем привет! Я стал замечать на себе, что чаще решаю задачи, связанные с эксплуатацией инфраструктуры (Ops), чем с разработкой. Это видно по моим статьям — они в основном посвящены настройке и развертыванию различных инструментов. Однако «Dev»-составляющая тоже важна, и поэтому я решил прокачиваться еще и в разработке!В этой статье я хочу поделиться опытом создания Kubernetes-оператора на Go. Этот язык часто используют для подобных задач, а сама идея родилась из практической потребнос…
Переезд большого сервиса с Perl на Golang едва ли кому‑то покажется простой задачей. А теперь представьте, что это главная страница Яндекса, на которую ежедневно заходят миллионы пользователей. И что продукт постоянно дорабатывается, а значит, нельзя взять и остановить разработку на пару лет переезда. Представили? Сложно? А вот, оказывается, всё возможно. Привет, Хабр! Меня зовут Вячеслав Круглов. Я руковожу одной из команд разработки бэкенда главной страницы Яндекса. Расскажу, как мы переписыв…
Релиз Go 1.24 запланирован на февраль, поэтому сейчас самое время узнать, что нового появилось в языке. Официальные release notes (примечания к релизу) довольно сухие, поэтому я подготовил интерактивную версию с множеством примеров, которые покажут, что именно изменилось и как теперь работает код.Также я добавил ссылки на соответствующие предложения (𝗣) и коммиты (𝗖𝗟) для описанных фич. Рекомендую их изучить, чтобы лучше понять детали реализации.Эта статья основана на официальных примечаниях к …
Когда смотришь на дизайн синтаксиса того или иного языка программирования невольно задумываешься, почему сделано так, а не иначе. Тут я обозреваю лишь некоторые идеи стоящие за этим: "программисту нельзя доверять", "язык должен быть удобен для пользователя", "каким качеством должен обладать язык программирования, чтобы заменить другой?".Программисту нельзя доверятьВсе начиналось с С, сего девизом: «Доверяй программисту», на данный момент всем понятно, что это было ошибко…
GitHubВ процессе разработки на Go нередко встаёт вопрос о создании удобного уровня абстракции для работы с базой данных: хочется иметь и простую генерацию миграций, и гибкий Query Builder. Проект Gormite был создан как раз для решения этих задач. Он предлагает облегчённый подход к ORM, при этом сохраняя гибкость при формировании SQL-запросов.Знакомство с GormiteGormite – это CLI-инструмент, которая не нуждается в прямой интеграции в go.mod. Она читает конфигурацию (mapping) из YAML-файла и по у…
Как работать с данной статьейЗапускайте каждый пример: Не нужно просто читать код. Напечатайте его, запустите, разберитесь в поведении. Экспериментируйте и ломайте: Избавьтесь от каких то этапов, измените буфер каналов, модифицируйте счетчик горутин. Если что-то сломалось, это может помочь лучше понять, как оно работает.Разберись в поведении: Прежде чем запустить измененный код, постарайся предсказать результат. Увидев неожиданное поведение разберись. Не принимай на веру объяснения критикуй и …
В дизайне и эволюции разных языков программирования наблюдаются одни и те же шаблоны, но почему-то редко описываются идеи за ними стоящие, из-за чего возникают вопросы почему сделано так, а не иначе. Тут я обозреваю идеи: "программисту нельзя доверять" и "язык должен быть удобен для пользователя", "каким качеством должен обладать язык программирования, чтобы заменить другой?"с небольшими примерами на C++, Go, Swift.Программисту нельзя доверятьВсе начиналось с С, с его де…