Обновить
129.5

Go *

Компилируемый, многопоточный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

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

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели1.5K

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

Я Роман Соловьев, ведущий ИТ‑инженер в отделе RnD и готовых решений управления развития продукта в СберТехе. Сегодня расскажу, с какими проблемами мы столкнулись при написании тестов к проекту на Go, активно использующему Docker‑контейнеры, и как нам удалось их решить.

Эта статья будет полезна тем, кто пишет модульные тесты на Go, особенно для проектов, использующих Docker‑контейнеры. Я постараюсь просто и понятно объяснить официальный code‑style для модульных тестов, а также подсветить подводные камни, с которыми можно столкнуться при их написании.

Читать далее

Параллелизм в Go тестах: все, что нужно знать о -p, -parallel и t.Parallel()

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели1.4K

В Go есть три способа управления параллельностью тестов:

Короткий гайд о -p, -parallel и t.Parallel а также бонус для любителей параллельного программирования

Читать далее

Тестируем Kubernetes. Vol 2 / Golang edition

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели2.6K

Привет, Хабр! Меня зовут Максим, я инженер в команде облачных сервисов Selectel. В этой статье хотел бы рассказать, как мы тестируем кластеры Kubernetes перед тем, как обновления попадают к клиентам.
Читать дальше →

А где память? Утечка goroutine и как ее пофиксить

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели1.7K

Утечка горутин в Go происходит, когда горутина продолжает существовать и потреблять ресурсы, даже если она больше не выполняет полезной работы или не может завершиться. Это может произойти по разным причинам.
Мы рассмотрим 3 примера из которых: 2 будут на каналах, 1 с использованием mutex.

Читать далее

Интерактивный тур по Go 1.24

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели4.2K

Релиз Go 1.24 принесёт ряд важных обновлений, которые сделают разработку удобнее и эффективнее. В этом обзоре мы разберём ключевые изменения: поддержку слабых указателей, улучшенные финализаторы, новый механизм управления доступом к файловой системе, а также значительные оптимизации map, включая переход на Swiss Tables. Кроме того, появилось больше инструментов для тестирования и бенчмаркинга, новые криптографические возможности и усовершенствования работы с JSON.

Читать далее

Видишь суслика? А он есть! Как главная страница Яндекса переезжала на Go

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели17K

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

Привет, Хабр! Меня зовут Вячеслав Круглов. Я руковожу одной из команд разработки бэкенда главной страницы Яндекса. Расскажу, как мы переписывали бэкенд с Perl на Go, поделюсь интересными подробностями переезда, а также сравню компоненты и продуктовые блоки.

Читать далее

DEVops: Разрабатываем свой Kubernetes оператор с кастомными ресурсами на Go

Время на прочтение27 мин
Охват и читатели2.6K

Используете готовые операторы в Kubernetes? Я тоже... Но с какого‑то момента я начал задаваться вопросом: «а как люди их пишут?». И я нашел ответ!

В этой статье я наглядно покажу, как создать свой кастомный оператор в Kubernetes на Go при помощи kubebuilder. Оператор позволит отслеживать изменения ресурсов в кластере, а затем отправлять уведомления в Telegram или другие мессенджеры. Какие ресурсы «трекать» будем описывать через кастомные ресурсы (Custom Resource). Погнали!

Читать далее

Паттерн Конкурентного генератора в Go: Наглядное руководство

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели2.4K

Генератор в Go позволяет асинхронно обрабатывать данные без перегрузки памяти. Разбираем основы работы.

Читать далее

Удобная ORM для Go с генерацией миграций и Query Builder’ом: Gormite

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели1.2K

В Go нет простых и хорошо задокументированных решений, позволяющих генерировать миграции, основываясь на сущностях системы. Существующие решения, например GORM, требуют внедрения лишних зависимостей. Gormite - это CLI-инструмент, позволяющий удобно и гибко создавать миграции, основываясь на Go коде и, при этом, не тянуть лишнюю зависимость в проект.

Читать далее

Идеи стоящие за дизайном языков программирования

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели3.4K

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

Читать далее

Механика горутин и каналов в Golang: разбор с примерами

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели5.8K

Статья объясняет горутины и каналы в Go с наглядными визуализациями, показывая, как они работают и взаимодействуют для конкурентности.

Читать далее

Обработка ошибок в Go — Не традиционный подход

Время на прочтение2 мин
Охват и читатели2.3K

Обработка ошибок — это важная часть любого языка программирования. Она помогает предотвратить незаметные сбои в приложениях, перехватывать неожиданные поведения и предоставлять осмысленные ответы, когда что-то идет не так. Однако подход Go к обработке ошибок часто приводит к написанию многословного и повторяющегося кода, что вызывает недовольство среди разработчиков. Давайте разберем, почему это происходит, какие ограничения это накладывает и какие решения могут быть предложены.

Читать далее

FissionGo: как запускать Go-функции в Kubernetes

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели960

Привет, Хабр!

Сегодня будем разбираться с FissionGo — фреймворком, который обещает избавить нас от работы с деплоями, контейнерами и YAML-манифестами.

Читать далее

Ближайшие события

Долой оверхед: как мы избавились от зависимостей в интеграционном тестировании микросервисов

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели3.1K

В микросервисной архитектуре есть множество зависимостей от других сервисов и инфраструктуры. В результате чего возникают проблемы, которые съедают большое количество сил и времени. Приходит, например, тестировщик с описанием воспроизведения бага — а чтобы его воспроизвести, надо долго готовить данные, а потом еще дольше поднимать фронт… После N-й итерации повторять такое вы, конечно, не будете это, мягко говоря, утомляет. Так интеграционные тесты становятся определенным оверхедом вместо того, чтобы упрощать жизнь разработчикам.

Меня зовут Степан Охорзин, я Senior Go Developer в «Лаборатории Касперского». У нас в компании уже много проектов/продуктов, которые пишутся на Go, а еще мы мигрируем на него с «плюсов» там, где это возможно. Ведь Go — отличный язык, когда речь идет о распределенных системах; в частности, мы разрабатываем на нем облачные решения.

Сегодня речь пойдет как раз об одном из таких инструментов — Kaspersky Security Center (KSC). Если коротко, то KSC — это консоль для удобного управления безопасностью на уровне предприятия, эдакий аналог ЦУПа для сложных IT-систем. Как вы уже догадались, KSC построен на микросервисной архитектуре — и именно в нем мы организовали интеграционное тестирование. Теперь наши тесты не просто не уходят в технический долг, а могут сами служить документацией. Мы же думаем только о бизнес-логике, все остальные вопросы берет на себя DI-контейнер.

В статье расскажу, как мы это реализовали, с деталями и примерами.

Читать далее

Гармония железа и кода: ускоряем Go, проектируя приложение с учетом архитектуры процессора

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели1.8K

Представьте, что ваш код работает на 30% быстрее, при этом вы почти его не меняли. Звучит как магия? На самом деле это может стать реальностью, если учитывать архитектуру процессора при проектировании приложения и данных. 

Привет! Я Александр Шакмаев — технический лидер в Cloud.ru. В статье предлагаю разобраться, как небольшие изменения, основанные на знании архитектуры процессора, могут привести к значительному ускорению Go. Готовы раскрыть потенциал вашего кода? Тогда переходите под кат.

Заглянуть под кат

Как запустить публичный сайт на телефоне или экономим на спичках

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели3.4K

Сейчас вас научу "плохому" — будем поднимать наше веб-приложение на телефоне. Для этой цели я накидал приложение на go, которое определяет IP адрес, вычисляет город, отправляет запрос во внешний сервис и отдает страницу с данными о погоде в вашей локации.

Читать далее

Алгоритм Кнута-Морриса-Пратта для поиска подстрок на Go

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели1.7K

Поиск подстроки в строке — важная задачка в текстовой обработке. В Go стандартная библиотека имеет strings.Index, но он использует простой перебор символов, который работает с O(n × m) в худшем случае, где n — длина текста, m — длина подстроки.

Алгоритм Кнута-Морриса-Пратта решает эту проблему, используя префикс-функцию, которая позволяет пропускать заведомо ненужные сравнения. В результате его сложность O(n + m), что делает его подходящим для больших текстов и множественных поисковых запросов.

Читать далее

Суть Go: Time

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели2.9K

Как не утонуть в параллельных вызовах и держать время под контролем? В статье разберём throttle и backpressure, научимся использовать таймеры, тикеры и таймауты без лишних задержек и зависаний — всё на простых примерах.

Читать далее

Сравнение кода DeepSeek и ChatGPT(Golang)

Время на прочтение9 мин
Охват и читатели20K

Весь этот шум заставил меня заинтресоваться DeepSeek. Самое банально сравнить с ChatGPT. Ну и плюсом у меня сегодня выходной, можно и поиграть немного. Код конечно на Go. Модели GPT-o1 и Deepseek-R1.

Читать далее

Заговор разработчиков против корпораций: архитектура и принципы

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели8.7K

С момента написания предыдущей статьи я находился под пристальным вниманием. Попытка опубликовать материалы на англоязычных платформах обернулась фиаско — в первые же минуты легионы последователей тайного братства обрушились с критикой:

— Нет никакой организации! — вопили они.

Подозреваю, что слежка велась через мой телеграм-канал.

Тем не менее я жив, а значит, пора поведать об архитектурной подлости неимоверных масштабов. Вы узнаете, как ведется борьба с крупными корпорациями изнутри и снаружи, как умы разработчиков заражают деструктивными идеями в обертке сакральных истин.

Узнать тайны, о которых молчали

Вклад авторов