Как правило, в Go для безопасного доступа к общим данным используются мьютексы. Да, каналы тоже можно приспособить для изменения общих данных, так как они потокобезопасны, но это усложняет и замедляет логику. Но в этой статье мы поговорим о другом. Современные процессоры имеют поддержку атомарных операций, что позволяет на основе них организовывать работу с общими данными до нескольких раз быстрее, чем с помощью общепринятых вариантов. Так как мьютексы реализованы на основе ОС, каналы сделан…
Однажды мы решили, что грамотных инженеров эффективнее всего растить самим. Так 3 года назад родился Route 256 — курсы Ozon для разработчиков и тестировщиков уровней junior и middle. Во время курса ведущие специалисты Ozon погружают в индустрию e-com, знакомят с актуальным стеком и бизнес-задачами. Самые успешные выпускники получают оффер в команду Ozon. В статье расскажем, почему для отбора мы используем алгоритмы, и покажем разбор задач с контеста. Почему проект использует алгоритмические з…
Opencv предоставляет широкие возможности по обработке изображений и работе с нейросетями. В данной статье мы напишем сервис, который позволит извлекать из изображений ряд параметров человека: пол, возраст, эмоции, а также местонахождение лица на фотографии. Получение данных характеристик бывает полезно для автоматического анализа видео и фото. Например, на конференции мы можем определить средний возраст участников, процентное соотношение мужчин и женщин, а также реакцию на конкретный доклад. Дл…
Привет, коллеги!В этой статье я хотел бы показать паттерн для тестов, которым я пользуюсь в своей повседневной жизни и очень надеюсь, что он окажется для Вас полезными.Проблема тестированияОсновные проблемы большего количества тестов, которые я наблюдаю, заключаются в том, что тесты не имеют четкой структуры, которую можно было бы легко понять и выделить каждую часть. Присутствует сложность чтения, особенно страшно выглядят тесты когда перед тестом исполняется какой-либо массивный сценарий, а т…
ВведениеCUDA (Compute Unified Device Architecture) — это параллельная вычислительная платформа и программная модель, разработанная компанией NVIDIA. Она позволяет разработчикам использовать графические процессоры (GPU) для выполнения вычислений, значительно ускоряя выполнение задач, требующих больших вычислительных ресурсов. В этой статье мы представим библиотеку go-cuda, которая предоставляет простые и удобные интерфейсы для работы с CUDA на языке программирования Go.Установка библиотекиИнициа…
Немного истории, реализация php, perl и банальная реализация на Golang.Интересно? Добро пожаловать в подкат...Как вы прекрасно знаете, с марта 2024 года, РКН начал накладывать ограничение на публикации в СМИ о способах обхода блокировок.Сообщаем вам, что на ваш материал на сайте Habr.com было наложено ограничение доступа для пользователей из определённой страны:Регион: RUДата: 01.03.2024Причина: RU / 149-ФЗ: 15.1.8Ведомство: RU / РоскомнадзорСледовательно, данный материал не доступен при обраще…
Привет, Хабр!Сегодня мы рассмотрим, как с помощью замечательной библиотеки Cobra превратить обычный Go-код в инструмент CLI. Cobra позволяет создавать интерфейсы командной строки.Начнем с самого начала — установки и настройки проекта.УстановкаПервое, что нужно сделать — это установить саму библиотеку Cobra:go get github.com/spf13/cobra/cobraДалее нужно инициализировать новый проект. Есть командаcobra init, которая создаст все файлы и структуру директорий для проекта. Переходим в каталог, где бу…
Привет, Хабр! В предыдущей статье я поделился своей версией шаблона Go-микросервиса для начинающих, чтобы помочь тем, кто только начинает знакомиться с языком и еще не полностью его освоил. В этом продолжении я хочу подойти к задаче более серьезно и создать полностью функциональный сервис с необходимой инфраструктурой, которую мы развернем в Docker. Кроме того, я планирую внести изменения в структуру проекта, учитывая замечания из комментариев и анализа кода других проектов.СодержаниеСоздание ш…
Привет, Хабр!Сегодня мы кратко рассмотрим то, как реализовать такие протколы, как TCP, UDP и QUIC в Golang.Начнем с TCP.TCPTCP — это очень надежный, ориентированный на соединение протокол. Он обеспечивает упорядоченную передачу данных, автоматом исправляя ошибки.Основные черты TCP:Надежность: подтверждения и повторная отправка потерянных пакетов.Упорядоченность: передача данных в том порядке, в котором они были отправлены.Контроль перегрузки: предотвращение коллапса сети за счет контроля скорос…