Category : golang

golang
Как не укусить себя за хвост во время написания функциональных тестов на Go

Залог успеха любого программного решения — хорошее покрытие его функциональными тестами. Каждая полностью покрытая функция — минус одна потенциальная ошибка в работе проекта или даже больше. Однако при написании тестов в проекте, насчитывающем тысячи строк кода и множество пакетов (packages), можно столкнуться с различными трудностями. Я Роман Соловьев, ведущий ИТ‑инженер в отделе RnD и готовых решений управления развития продукта в СберТехе. Сегодня расскажу, с какими проблемами мы столкнулись…

  • суббота, 15 февраля 2025 г. в 00:00:09
golang
А где память? Утечка goroutine и как ее пофиксить

ВведениеВ мире современной разработки на языке Go (Golang) горутины являются одной из ключевых особенностей, обеспечивающих высокую производительность и эффективность многозадачности. Они представляют собой легковесные потоки, которые позволяют выполнять задачи параллельно, что делает Go идеальным выбором для создания высоконагруженных приложений. Однако, как и любая мощная технология, горутины требуют внимательного подхода к управлению ресурсами. Одной из распространённых проблем, с которой ст…

  • пятница, 14 февраля 2025 г. в 00:00:07
golang
Тестируем Kubernetes. Vol 2 / Golang edition

Привет, Хабр! Меня зовут Максим, я инженер в команде облачных сервисов Selectel. В этой статье хотел бы рассказать, как мы тестируем кластеры Kubernetes перед тем, как обновления попадают к клиентам. Мой коллега Артём уже писал о тестировании в Kubernetes с помощью Python. Сегодня же мы посмотрим на небольшие примеры на Go. Используйте навигацию, если не хотите читать текст полностью: → Предыстория → Пишем тест → Запускаем тест → Кратко. Что еще → Выводы Перед началом скажу, чем обусловлен…

  • пятница, 14 февраля 2025 г. в 00:00:06
golang
Параллелизм в Go тестах: все, что нужно знать о -p, -parallel и t.Parallel()

Тонкая настройка параллелизма в тестах GoВ Go есть три способа управления параллельностью тестов:Флаг -pФлаг -parallelВызов функции t.Parallel()Но многие ли понимают, как они работают? И зачем нам все три?Оказывается:-p управляет числом тестовых пакетов, выполняемых параллельно.-parallel определяет количество тестовых функций внутри одного пакета, выполняемых параллельно.t.Parallel() помечает тестовую функцию, разрешая Go выполнять её параллельно с другими тестами в том же пакете.Пример 1Допуст…

  • пятница, 14 февраля 2025 г. в 00:00:05
golang
Паттерн Конкурентного генератора в Go: Наглядное руководство

Мастерство конкурентности в Go: Механика горутин и каналов Паттерн генератор (вы туть)Паттерн конвейер (оригинал) Fan-in Fan-out (оригинал)Итак вторая часть продолжаем. Теперь давайте посмотрим, как эти примитивы объединяются, образуя мощные шаблоны, которые решают реальные проблемы.В этой статье мы рассмотрим генератор и попытаемся визуализировать его. Итак, давайте подготовимся, поскольку весь процесс пройдем с примерами.ГенераторГенератор как фонтан, который непрерывно производит значения, к…

  • четверг, 13 февраля 2025 г. в 00:00:14
golang
DEVops: Разрабатываем свой Kubernetes оператор с кастомными ресурсами на Go

ВступлениеВсем привет! Я стал замечать на себе, что чаще решаю задачи, связанные с эксплуатацией инфраструктуры (Ops), чем с разработкой. Это видно по моим статьям — они в основном посвящены настройке и развертыванию различных инструментов. Однако «Dev»-составляющая тоже важна, и поэтому я решил прокачиваться еще и в разработке!В этой статье я хочу поделиться опытом создания Kubernetes-оператора на Go. Этот язык часто используют для подобных задач, а сама идея родилась из практической потребнос…

  • четверг, 13 февраля 2025 г. в 00:00:12
golang
Видишь суслика? А он есть! Как главная страница Яндекса переезжала на Go

Переезд большого сервиса с Perl на Golang едва ли кому‑то покажется простой задачей. А теперь представьте, что это главная страница Яндекса, на которую ежедневно заходят миллионы пользователей. И что продукт постоянно дорабатывается, а значит, нельзя взять и остановить разработку на пару лет переезда. Представили? Сложно? А вот, оказывается, всё возможно. Привет, Хабр! Меня зовут Вячеслав Круглов. Я руковожу одной из команд разработки бэкенда главной страницы Яндекса. Расскажу, как мы переписыв…

  • четверг, 13 февраля 2025 г. в 00:00:12
golang
Интерактивный тур по Go 1.24

Релиз Go 1.24 запланирован на февраль, поэтому сейчас самое время узнать, что нового появилось в языке. Официальные release notes (примечания к релизу) довольно сухие, поэтому я подготовил интерактивную версию с множеством примеров, которые покажут, что именно изменилось и как теперь работает код.Также я добавил ссылки на соответствующие предложения (𝗣) и коммиты (𝗖𝗟) для описанных фич. Рекомендую их изучить, чтобы лучше понять детали реализации.Эта статья основана на официальных примечаниях к …

  • четверг, 13 февраля 2025 г. в 00:00:10
golang
Идеи стоящие за дизайном языков программирования

Когда смотришь на дизайн синтаксиса того или иного языка программирования невольно задумываешься, почему сделано так, а не иначе. Тут я обозреваю лишь некоторые идеи стоящие за этим: "программисту нельзя доверять", "язык должен быть удобен для пользователя", "каким качеством должен обладать язык программирования, чтобы заменить другой?".Программисту нельзя доверятьВсе начиналось с С, сего девизом: «Доверяй программисту», на данный момент всем понятно, что это было ошибко…

  • среда, 12 февраля 2025 г. в 00:00:11