Все потоки
Поиск
Написать публикацию
Обновить
91.56

Go *

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

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

Погружение в параллелизм в Go

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

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

Эта статья является неким сборником многих статей про все, что связано с параллелизмом в Go, например: горутины, каналы, select и многое другое.

Я хотел углубиться в тему горутин с параллелизмом и, слушая на фоне "The Doors", поглощал информацию и выделял интересные мысли из статей

Надеюсь, Вы найдете для себя то, что искали.

Погрузиться в параллелизм

Как я свалил рутинные задачи на low-code-платформу и не пожалел

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

Привет! На связи Леша Шамшур, разработчик ПО LiSeller. Недавно мой хороший знакомый Паша устроился джуниор-разработчиком в отдел бэкенд-разработки Debex: компания продает просроченные долги. 

После пришел ко мне и захотел поделиться уже своим опытом работы с low-код-инструментами. Решили, что будет круто выложить инсайты на Хабр. Начнем 👇 

Читать далее

Собираем данные из сотни микросервисов, или Как мы разобрали Ozon на кубики, а потом собрали заново

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

Всем привет! Меня зовут Саша, я руковожу группой разработки Composer Core в Ozon Tech. В этой статье я расскажу о том, как устроена пользовательская часть одного из ведущих российских маркетплейсов, в развитии которой на момент написания статьи участвуют сотни специалистов из десятков команд. При наличии такого количества людей разрабатывать новую функциональность, не рискуя сломать уже существующую, является достаточно сложной задачей.

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

Продукт, который мы разработали, вряд ли когда-нибудь станет open-source-проектом, так как он слишком зависит от специфики инфраструктуры Ozon Tech. Но основные принципы могут быть полезны при проектировании похожих систем.

Читать далее

В поисках хорошего стиля. Часть 1. Зачем нам свои линтеры на Go в Островке

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

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

Всем привет! Меня зовут Артём Блохин, я Golang-разработчик в команде интеграций Островка.

Если бы «Рождественская история» Чарльза Диккенса была про стиль кода, то получилось бы как-то так:

«Начнём сначала: код‑стайл умер. Сомневаться в этом не приходилось. Свидетельство о его погребении было подписано девопсом, архитектором и тимлидом. Оно было подписано разработчиком Островка.»

Отправиться на поиски хорошего стиля

Типизированные eDSL на Go

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

В статье показано, как реализовать встраиваемый типизированный DSL на Go. Рассматриваемое представление будет типобезопасным, т.е. не позволит сконструировать некорректные выражения (термы), но допускает разные интерпретации выражений. Система типов DSL один-к-одному маппится на систему типов Go, поэтому весь type-checking производится компилятором.

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

Читать далее

Применения Continuation-passing style в Go

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

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

Читать далее

Под капотом облаков. Строим облачную консоль. Часть 1. Знакомство

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

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

Это моя первая публикация из цикла статей про проектирование и разработку облачной консоли, с помощью которого пользователи могут гибко управлять инфраструктурой.

Идея подсветить данную тему пришла в результате накопленного многолетнего опыта проектирования тех самых облаков и ввиду дефицита информации о подобных системах в публичных источниках.

Думаю, многие из любознательных читателей этой статьи знакомы или сталкивались с такими понятиями, как "облачный провайдер” и "виртуализация".

А вы когда-нибудь задумывались, как происходит создание виртуальных машин в среде виртуализации, когда вы нажимаете на кнопку в консоли AWS? Или как реализуется заказ кластеров Kubernetes и дальнейший контроль жизненного цикла этого продукта: от биллинга услуги до управления доступом и ведения системы аудита?

Если я смог вам заинтересовать, то добро пожаловать под кат.

Читать далее

«Бобер выдыхай»: Go, WinAPI и ассемблер

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

Что вам приходит в голову при слове «Golang»? Google и микросервисы? Я тоже так думал, но реальность оказалась значительно интересней.

Читать далее

Лучшая система шаблонов в Go

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

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

В этой статье хочу поговорить про, пожалуй, мою самую любимую библиотеку для Go. Это Jet templates. Библиотека, которая очень упрощает работу с шаблонами(templates) в Go.

Читать далее

Продвинутые структуры Redis

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

Редис – это кеш? А, может быть, это основная база данных? Так мы и живём в Мойре – опенсорс-системе реалтайм-алёртинга, родом из компании Контур. Расскажу вам про плюсы и минусы такого подхода, про жизнь в Редисе при 3 миллионах RPS, про миграции данных и оптимизацию базы.

Читать далее

Reflection в Go

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

Сегодня мы рассмотрим в одну из интересных особенносстей Golang — reflection. Мы рассмотрим, что такое reflection, как он работает, и когда его стоит использовать. Reflection позволяет программам инспектировать свои структуры и модифицировать поведение в runtime.

Читать далее

Написание функционального тестирования в Go

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

Не все знают, как писать функциональные тесты. В этой статье будут библиотеки, фишки про функциональные тесты, а самое главное — попрактикуемся их писать на примере Rest API.

Читать далее

ChatOps на практике: создание бота для мониторинга логов

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

Недавно на работе меня попросили придумать рабочую задачку для студентов. Поскольку я работаю в инфраструктурной команде, мои повседневные задачи вряд ли подходят для их домашек или курсовых работ. Чтобы найти подходящую идею, я начал перебирать инструменты, которыми мы с командой часто пользуемся. Большинство из них интегрированы с чатами и ботами, и один из ключевых инструментов — это Алерт Бот. Он отслеживает логи и отправляет оповещения, если происходит что-то необычное. Это позволяет нам быстрее обнаруживать и устранять инциденты.

Читать далее

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

Как создать генератор кодов верификации на Go с помощью SMS API

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

Привет, Хабр! Всегда было любопытно, как автоматизировать отправку кодов через SMS для второго этапа подтверждения личности при входе пользователя. Мы с коллегой решили разработать простой, но эффективный инструмент, который мог бы автоматически генерировать и отправлять SMS с кодами пользователя. Для реализации этой задачи выбрали API сервиса МТС Exolve.

Читать далее

Как защитить свое Go-приложение

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

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

В этой статье мы поделимся с вами методами, которые помогут сделать ваши Go-приложения неприступными крепостями.

Читать далее

Собиратель конфигураций на Go

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

Начну с того, что я C#-разработчик, но Go мне очень нравится и один из проектов я решил для разнообразия и расширения знаний написать в связке Go + React.js + MongoDB. И тут я понял, что не могу найти библиотеку пакет для чтения единых настроек конфигурации из разных источников. Часть настроек была в .env, часть - в переменных окружения. Хотелось получить экземпляр одной структуры со всеми значениями, выполнив какую-то одну функцию. Возможно, плохо искал. Но, не найдя, решил написать своё. Тем более у меня уже был опыт работы над подобным open-source проектом, но для C#.

Я никогда ранее не писал пакетов для Go, поэтому просто начал писать код как для программы, чтобы просто смотреть, запускать, тестировать. Понять, насколько это реализуемо. А потом уже оформил в пакет.

Посмотреть, чего он там нагородил

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

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

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

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

В этой статье мы и рассмотрим как использовать defer в Golang.

Читать далее

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

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

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

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

Читать далее

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

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

Привет, Хабр! Эта статья для тех, кто хочет понять, когда стоит использовать 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{}
}

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

Читать дальше →

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

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

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

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

Читать далее

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