Category : golang

golang
Go sync.WaitGroup и проблема с выравниванием

WaitGroup — это, по сути, способ дождаться, пока несколько горутин закончат свою работу. Мы начнем с основ, а затем разберемся, как это устроено под капотом.Есть классные статьи, где рассматривается несколько примитивов синхронизации в Go: Go Sync Mutex: Normal & Starvation ModeGo sync.Pool and the Mechanics Behind ItКаждый из них имеет свой набор проблем, и этот не отличается. Мы сосредоточимся на проблемах выравнивания WaitGroup, и как ее  внутренняя структура менялась в разных версиях.Эт…

  • вторник, 15 октября 2024 г. в 00:00:10
golang
Server Side Rendering на Go

Жизнь – это вечная спираль, где всё идёт по кругу, но с каждым витком становится лучше. Ещё 20 лет назад я писал веб-приложения на Perl + Template Toolkit 2, генерируя HTML на стороне сервера. Время шло, и веб-разработка разделилась на две половины: фронтенд и бэкенд, а между ними API. Со временем я переключился с Perl на Go для бэкенда и AngularJS, а потом и Vue для фронтенда. В таком стеке я создал несколько проектов, включая HighLoad.Fun. Писать API и генерировать клиентскую библиотеку на Ty…

  • воскресенье, 13 октября 2024 г. в 00:00:22
golang
Анонимная сеть в 100 строк кода на Go

ВведениеПрошло уже более года с тех пор как я написал статью - Анонимная сеть в 200 строк кода на Go. Пересмотрев её однажды осенним вечером я понял насколько всё в ней было ужасно - начиная с самого поведения логики кода и заканчивая его избыточностью. Сев за ноутбук и потратив от силы 20 минут у меня получилось написать сеть всего в 100 строк кода, используя лишь и только стандартную библиотеку языка.НачалоЕсли мы посмотрим на большинство анонимных сетей современности, то можно заметить, что …

  • пятница, 11 октября 2024 г. в 00:00:10
golang
Создание AI-ассистента с OpenAI Assistants API на Go

Всем привет!Меня зовут Дмитрий, я занимаюсь развитием отношений с клиентами и партнерами в IT-компании StecPoint.Недавно возникла необходимость создать AI-ассистента, обученного искать и выдавать информацию из базы знаний, предоставленных заказчиком.В этой статье мы рассмотрим процесс создания MVP такого ассистента. Мы загрузим в него файлы, зададим инструкции, привяжем все к Telegram-боту и будем обрабатывать запросы пользователей. Для создания ассистента будем использовать функциональность Op…

  • вторник, 8 октября 2024 г. в 00:00:04
golang
Муравьиный алгоритм. Решение задачи коммивояжера

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

  • понедельник, 7 октября 2024 г. в 00:00:10
golang
Транзакции в БД на Go с использованием многослойной архитектуры

Когда я присоединяюсь к новой компании, меня часто посещает синдром самозванца. После всех этих собеседований кажется, что парни знают, что делают и я смиренно настравиаюсь учиться у лучших.Однажды, я столкнулся с инцидентом на проде и обратился за помощью к самому опытному инженеру. Он пришел на помощь и с легкостью изменил значение в БД с помощью... ручного обновления. 🤯 Проблема заключалась в том, что набор SQL-обновлений не был выполнен внутри транзакции. Работа в новой компании — это всегд…

  • понедельник, 7 октября 2024 г. в 00:00:09
golang
Массивы и слайсы в Go — для собеседований

Набив несколько шишек поначалу мы начинаем довольно уверенно пользоваться массивами и слайсами в Go и обычно не сильно задумываемся над разными неприятными подробностями (если пишем достаточно аккуратно). Однако когда дело доходит до собеседований, оказывается что наши интуитивные представления легко могут дать сбой - где-то что-то забылось, а о каких-то нюансах может и не задумывались.Здесь собраны несколько базовых вопросов встретившихся в последнюю сессию поисков работы :) некоторые могут бы…

  • воскресенье, 6 октября 2024 г. в 00:00:05
golang
Как мы законтрибьютили целую строчку в HashiCorp Vault

Привет! Меня зовут Пётр Жучков, я руководитель группы хранения секретов и конфигураций в отделе Message Bus в Ozon. Мы отвечаем за поддержку и развитие системы хранения и использование секретов, активно сотрудничаем с ребятами из департамента информационной безопасности, чтобы все сервисы могли безопасно работать с секретами.Основной наш инструмент для управления секретами — Vault. Он отличается хорошей функциональностью, а также имеет подробную документацию, благодаря которой можно быстро нача…

  • суббота, 5 октября 2024 г. в 00:00:05
golang
Алгоритм Прима

В данной статье я бы хотел объяснить работу алгоритма Прима. Алгоритм используется для нахождения минимального остовного дерева. Сам алгоритм очень прост, в статье хотел бы поделиться своей реализации на языке Go.Начальные терминыГраф — это структура данных в которой хранятся вершины и связи между ними. Удобнее всего представлять графы в виде матрицы смежности.Матрица смежности — эта квадратная матрица, размер матрицы равен количеству вершин в графе. В ней хранится информация о соседях вершин г…

  • пятница, 4 октября 2024 г. в 00:00:13