Как стать автором
Обновить
97.33

Go *

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

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

Микросервисы на Go: Как заставить систему работать на тебя

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

Эта статья — это своего рода маленький гайд или роудмап для тех, кто хочет погрузиться в микросервисы, но без лишнего стресса. Я расскажу о том, что действительно работает на практике, какие приемы стоит взять на вооружение, а от каких лучше держаться подальше. Всё это будет основано на реальных примерах и моем опыте, без излишней теории и заумных терминов.

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

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии5

Новости

Внутреннее устройство sync.Map, сравнение производительности с map + RWMutex

Время на прочтение3 мин
Количество просмотров829

Привет, Хабр! Эта статья для тех, кто хочет понять, когда стоит использовать sync.Map, а когда достаточно обычной map с мьютексом.


В Каруне этот вопрос иногда возникал на код ревью, поэтому такая статья мне показалась полезной. TLDR: sync.Map лучше работает на задачах, где много операций чтения, и ключи достаточно стабильны.


Внутреннее устройство sync.Map


sync.Map — это потокобезопасная реализация мапы в Go, оптимизированная для определенных сценариев использования.


Основная структура sync.Map выглядит примерно так:


type Map struct {
    mu Mutex
    read atomic.Value // readOnly
    dirty map[interface{}]*entry
    misses int
}

type readOnly struct {
    m       map[interface{}]*entry
    amended bool
}

type entry struct {
    p unsafe.Pointer // *interface{}
}

Здесь мы видим несколько ключевых полей:

Читать дальше →
Всего голосов 8: ↑7 и ↓1+10
Комментарии2

Используем gocv, чтобы определить возраст, эмоции и пол человека по фото

Время на прочтение11 мин
Количество просмотров1.1K

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

Для демонстрации будем использовать модели caffe и onnx. Сервис напишем с использованием golang. Ниже приведен пример изображения, на котором распознан пол и примерный возраст человека. В нашем сервисе мы будем возвращать JSON, в котором будут указаны возраст, эмоции, пол и местоположение лиц на фотографии.

Читать далее
Всего голосов 5: ↑5 и ↓0+7
Комментарии1

Как мы выбираем задания на отбор Route 256: подход и разбор задач

Время на прочтение14 мин
Количество просмотров1.2K

Однажды мы решили, что грамотных инженеров эффективнее всего растить самим. Так 3 года назад родился Route 256 — курсы Ozon для разработчиков и тестировщиков уровней junior и middle.

Во время курса ведущие специалисты Ozon погружают в индустрию e-com, знакомят с актуальным стеком и бизнес-задачами. Самые успешные выпускники получают оффер в команду Ozon.

В статье рассказали, почему для отбора мы используем алгоритмы, и показали разбор задач с контеста.  

Читать далее
Всего голосов 11: ↑10 и ↓1+12
Комментарии0

Истории

Go: жарим общие данные. Атомно, быстро и без мьютексов

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


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

Но в этой статье мы поговорим о другом. Современные процессоры имеют поддержку атомарных операций, что позволяет на основе них организовывать работу с общими данными до нескольких раз быстрее, чем с помощью общепринятых вариантов. Так как мьютексы реализованы на основе ОС, каналы сделаны на основе внутреннего кода Go с использованием тех же мьютексов из ОС под капотом, а атомарные операции делает сам процессор аппаратно за существенно меньшее количество тактов.
Пожарим омлет по атомному?
Всего голосов 31: ↑30 и ↓1+39
Комментарии25

Подбираем нужные автозапчасти: миллиарды комбинаций за 12 минут

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

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

Читать далее
Всего голосов 22: ↑21 и ↓1+23
Комментарии7

Шаблон unit-тестов на Go

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

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

В ходе статьи мы на примере шаблона разберем написание юнит-тестов и бенчмарков, а потом объединим их в одну универсальную функцию.

Читать далее
Всего голосов 8: ↑6 и ↓2+6
Комментарии10

Создание CLI утилит на Go с библиотекой Cobra

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

Сегодня мы рассмотрим, как с помощью замечательной библиотеки Cobra превратить обычный Go-код в инструмент CLI. Cobra позволяет создавать интерфейсы командной строки.

Начнем с самого начала — установки и настройки проекта.

Читать далее
Всего голосов 11: ↑9 и ↓2+11
Комментарии2

Не только VPN. Как это было и куда идет

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

Немного истории, реализация php, perl и банальная реализация на Golang.
Интересно? Добро пожаловать в подкат...

Читать далее
Всего голосов 21: ↑12 и ↓9+5
Комментарии12

Шаблон Go-микросервиса для начинающих от .NET разработчика. Часть 2

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров4.4K

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

Читать далее
Всего голосов 10: ↑3 и ↓70
Комментарии9

Кратко про сетевые протоколы в Golang: TCP, QUIC и UDP

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

Сегодня мы кратко рассмотрим то, как реализовать такие протколы, как TCP, UDP и QUIC в Golang.

Начнем с TCP.

Читать далее
Всего голосов 18: ↑12 и ↓6+10
Комментарии3

Зачем нужен код-ревью?

Время на прочтение3 мин
Количество просмотров1.4K

Привет, Хабрюзеры.

Недавно я устроился на вакансию Golang junior разработчика в новую компанию. Ранее я несколько лет программировал на PHP, пока не познакомился с Go. Думал, что моя мечта сбылась: я набрался опыта, стал более опытным специалистом и теперь могу продолжать развиваться. Однако, после выполнения задачи код, написанный мной, нужно было отправить на код-ревью. После этого мне приходили правки, которые я должен был исправить и снова отправить на ревью. Раньше я не понимал, зачем нужен этот процесс. На форумах и в сообществах многие писали, что код работает — и слава Богу, так зачем нужны эти ревью?

Теперь, после некоторого времени работы, я хотел бы поделиться своим мнением о код-ревью и объяснить, почему этот процесс важен.

Читать далее
Всего голосов 13: ↑5 и ↓8+3
Комментарии10

Создание Framework для Go: Вдохновение от Laravel

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

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

Читать далее
Всего голосов 8: ↑5 и ↓3+7
Комментарии15

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

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн

Как наш ученик попал на стажировку в VK. История Артёма Мазура

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

Мы следим за жизнью всех ребят, которые приходят в ЦПМ и участвуют в наших проектах. Каждый раз, когда мы узнаем об их достижениях, нам очень трепетно и радостно! Сегодня мы хотим поделиться историей Артёма Мазура, который прошел на стажировку, внимание, в VK!

Читать далее
Всего голосов 25: ↑2 и ↓23-21
Комментарии7

Быстрый старт: Docker + SMTP + Java/Go

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

Не так давно у меня появилась необходимость на нескольких проектах сделать регистрацию с подтверждением email, так же хотелось минимизировать затраты и исключить лишние телодвижения, так сказать методом ctrl+c ctrl+v, без танцев с бубном. Так же нам не нужно принимать почту и прочее, просто отправка, не более

P.s. Для прожженных отцов разработки ничего нового тут не будет

Итак, поехали ;-)

Читать далее
Всего голосов 7: ↑2 и ↓5+1
Комментарии10

Ошибки в языке Go — это большая ошибка

Время на прочтение3 мин
Количество просмотров16K
// гофер пытается найти логику среди обработки ошибок
+-------+-------+-------+-------+-------+-------+
|       |  err  |       |  err  |       |  err  |
|  ,_,,,        |       |       |       |       |
| (◉ _ ◉)       |       |       |       |       |
|  /)  (\               |       |       |       |
|  ""  ""               |       |       |       |
+       +-------+       +-------+       +-------+
|       |  err          |  err  |       |  err  |
|       |               |       |       |       |
|       |               |       |       |       |
+-------+       +-------+       +-------+       +
|  err  |               |  err                  |
|       |               |                       |
|       |               |                       |
+       +-------+       +       +-------+       +
|       |  err  |               |  err  | logic |
|       |       |               |       |       |
|       |       |               |       |       |
+-------+-------+-------+-------+-------+-------+

Я пишу на Go несколько лет, в Каруне многие вещи сделаны на нём; язык мне нравится своей простотой, незамысловатой прямолинейностью и приличной эффективностью. На других языках я писать не хочу.


Но сорян, к бесконечным if err != nil я до конца привыкнуть так и не смог.


Да-да, я знаю все аргументы: явное лучше неявного, язык Go многословен, зато понятен, и всё такое. Но, блин, на мой взгляд Го-вэй Го-вэю рознь.

Читать дальше →
Всего голосов 45: ↑41 и ↓4+42
Комментарии94

Докеризация сборки проекта на всех уровнях

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров4.1K

Всем привет, на связи Вадим Макеров, бэкенд‑разработчик iSpring. Успешная воспроизводимая сборка проекта является критическим фактором в поддержке и развитии проекта. При большом количестве проектов и технологических стеков гарантировать воспроизводимость сборки — «собралось однажды, соберется всегда» — сложнее.

О том, как реализовать идемпотентность сборки, я рассказывал в рамках митапа в офисе iSpring в 2023 году. Эта статья — текстовая версия моего доклада.

Читать про контейнеризацию сборки
Всего голосов 8: ↑8 и ↓0+10
Комментарии7

Горутины в Go: Базовые примеры

Уровень сложностиСредний
Время на прочтение2 мин
Количество просмотров1.9K

Горутины — это функции или методы, выполняемые конкурентно с другими горутинами в одном и том же адресном пространстве. Они легковеснее традиционных потоков, занимают меньше памяти и позволяют эффективно использовать ядра процессора.

Читать далее
Всего голосов 7: ↑5 и ↓2+5
Комментарии1

Анонимный RAT при глобальном наблюдателе

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

Удалённый доступ может быть как очень опасной программной функцией, так и очень полезной - всё зависит от контекста, намерений, задач и целей с которыми подобные программы будут применяться. Такая же ситуация с анонимностью и анонимными коммуникациями в общем. Они могут как скрывать злонамеренную активность, так и скрывать законную активность от посторонних, которым её выявление может быть выгодно как по финансовым, так и по политическим причинам. Вследствие этого, технология остаётся нейтральной, ровно, как и любая полезная, и в это же самое время потенциально опасная вещь.

Читать далее
Всего голосов 6: ↑6 и ↓0+11
Комментарии1

MapReduce на Go: превратите ваши большие данные в понятную карту и удобный редьюс

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

Часто задается вопрос: как эффективно и быстро обработать огромные объемы информации? Ответом на этот вызов стала концепция MapReduce, разработанная в недрах Google.

MapReduce — это парадигма программирования, созданная для обработки и генерации больших объемов данных с использованием параллельных распределенных алгоритмов. Основная фича проста: сначала данные разбиваются на небольшие части (фаза Map), а затем результаты этих частей агрегируются в финальный результат (фаза Reduce).

Читать далее
Всего голосов 11: ↑9 и ↓2+12
Комментарии2
1
23 ...

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

Работа

Go разработчик
138 вакансий