Category : golang

golang
Как использовать defer в Go

Привет, Хабр!Defer — это ключевое слово в Go, которое позволяет отложить выполнение функции до момента завершения выполнения текущей функции. Это относительно простой способ управлять ресурсами.В этой статье мы и рассмотрим как использовать defer в Golang.ОсновыЧтобы понять, как defer работает в Go, нужно знать немного о его внутреннем устройстве. Когда вы используете defer, вы говорите компилятору Go отложить выполнение указанной функции до момента завершения окружающей функции. То естьdefer п…

  • воскресенье, 11 августа 2024 г. в 00:00:08
golang
Микросервисы на Go: Как заставить систему работать на тебя

Когда-то мне пришлось перелопатить сотни статей, пролистать горы книг и выпить не одну чашку кофе, чтобы разобраться в микросервисной архитектуре. Я искал ответы на вопросы, которые появлялись на каждом шагу: как заставить микросервисы работать дружно, как удержать систему на плаву и, главное, как не сойти с ума от всех этих нюансов. После всего этого марафона мне хочется поделиться своими находками и советами, чтобы сэкономить тебе пару бессонных ночей.Эта статья — это своего рода маленький га…

  • суббота, 10 августа 2024 г. в 00:00:09
golang
Внутреннее устройство sync.Map, сравнение производительности с map + RWMutex

Привет, Хабр! Эта статья для тех, кто хочет понять, когда стоит использовать sync.Map, а когда достаточно обычной map с мьютексом. В Каруне этот вопрос иногда возникал на код ревью, поэтому такая статья мне показалась полезной. TLDR: sync.Map лучше работает на задачах, где много операций чтения, и ключи достаточно стабильны. Внутреннее устройство sync.Map sync.Map — это потокобезопасная реализация мапы в Go, оптимизированная для определенных сценариев использования. Основная структура sync.Ma…

  • пятница, 9 августа 2024 г. в 00:00:05
golang
Подбираем нужные автозапчасти: миллиарды комбинаций за 12 минут

Привет! Меня зовут Кирилл Егоров, я технический лидер двух юнитов Авито: «Запчасти» и «Строительство и ремонт». В этой статье рассказываю о том, как мы определяем, к каким автомобилям подходят запчасти из объявлений, как нам с помощью Golang удается перебрать миллиарды вариантов и какие трудности пришлось решить при реализации этого решения.Задача юнита «Запчасти» — помочь пользователю легко и быстро найти детали, которые подойдут его авто. В приложение встроен раздел «Гараж» — туда можно добав…

  • среда, 7 августа 2024 г. в 00:00:10
golang
Go: жарим общие данные. Атомно, быстро и без мьютексов

Как правило, в Go для безопасного доступа к общим данным используются мьютексы. Да, каналы тоже можно приспособить для изменения общих данных, так как они потокобезопасны, но это усложняет и замедляет логику. Но в этой статье мы поговорим о другом. Современные процессоры имеют поддержку атомарных операций, что позволяет на основе них организовывать работу с общими данными до нескольких раз быстрее, чем с помощью общепринятых вариантов. Так как мьютексы реализованы на основе ОС, каналы сделан…

  • среда, 7 августа 2024 г. в 00:00:09
golang
Как мы выбираем задания на отбор Route 256: подход и разбор задач

Однажды мы решили, что грамотных инженеров эффективнее всего растить самим. Так 3 года назад родился Route 256 — курсы Ozon для разработчиков и тестировщиков уровней junior и middle. Во время курса ведущие специалисты Ozon погружают в индустрию e-com, знакомят с актуальным стеком и бизнес-задачами. Самые успешные выпускники получают оффер в команду Ozon. В статье расскажем, почему для отбора мы используем алгоритмы, и покажем разбор задач с контеста.  Почему проект использует алгоритмические з…

  • среда, 7 августа 2024 г. в 00:00:08
golang
Используем gocv, чтобы определить возраст, эмоции и пол человека по фото

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

  • среда, 7 августа 2024 г. в 00:00:07
golang
Шаблон unit-тестов на Go

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

  • суббота, 3 августа 2024 г. в 00:00:09
golang
Использование CUDA в Go: Библиотека go-cuda

ВведениеCUDA (Compute Unified Device Architecture) — это параллельная вычислительная платформа и программная модель, разработанная компанией NVIDIA. Она позволяет разработчикам использовать графические процессоры (GPU) для выполнения вычислений, значительно ускоряя выполнение задач, требующих больших вычислительных ресурсов. В этой статье мы представим библиотеку go-cuda, которая предоставляет простые и удобные интерфейсы для работы с CUDA на языке программирования Go.Установка библиотекиИнициа…

  • пятница, 2 августа 2024 г. в 00:00:08