Category : golang

golang
Как я раздул из гофера слона или история распределенного сократителя ссылок

Вполне логично предположить, что сократитель ссылок — довольно простой сервис как с точки зрения пользователя, так и под капотом. Но что, если, взяв за основу такую простую задачу, построить целую распределенную систему?Мой шортенер начинался как простая практика с Go и gRPC после всех ОГЭ :-), где должно было быть 3 простеньких сервиса: inline тг бот, API gateway и ядро. Но с каждым днем идей все больше, энтузиазм растёт, я стал делать упор на высокие нагрузки, и постепенно мини-практика начал…

  • пятница, 8 августа 2025 г. в 00:00:11
golang
Построение REST API на Go с использованием Gorilla Mux и MongoDB

go langВведениеВ данной статье будет рассмотрена практическая интеграция MongoDB с веб-приложением на Go, построенным на базе маршрутизатора Gorilla Mux. Цель — получить минимальный, но функциональный REST API с поддержкой CRUD-операций над сущностью Book, при этом соблюдая лучшие практики структурирования кода.Материал рассчитан на разработчиков, знакомых с Go, HTTP API и основами работы с базами данных.Выбор стекаGo — компилируемый язык с лаконичным синтаксисом, встроенной поддержкой параллел…

  • пятница, 8 августа 2025 г. в 00:00:10
golang
HTMX, AlpineJS, SSR v1/2/3 и SPA. Что к чему

HTMX и AlpineJSHTMX и AlpineJSэто две JS библиотеки, которые расширяют HTML специальными аттрибутами и позволяют писать фронтенд без SPA фреймворков.Это альтернативы React/Vue/Angular и иже с ними. Их появление вызвано усталостью от сложной JS экосистемы и тоской по временам, когда задачи решались с помощью PHP и jQuery.Я всю жизнь писал JSON API и SPA интерфейсы и моему мозгу трудно было переварить, зачем нужны эти библиотеки и как с ними работать. Поэтому я написал эту статью.HTMX и AlpineJS …

  • четверг, 7 августа 2025 г. в 00:00:08
golang
Явное и неявное определение типов и полей в Go

ПроблемаВ golang нет undefined/none, из-за чего структуры, функции обычные и переменные нельзя использовать гибко - нет синтаксического сахара, как в python. Есть значение nil, но оно тоже не дает понимания, было ли значение передано или нет, так как golang по умолчанию задает значения переменным или полям структуры, например:дана структураtype Person struct { Name string Position string } person := Pesron{Name: "Robert"} при получении поля …

  • среда, 6 августа 2025 г. в 00:00:10
golang
FUSE + Go: ковка собственной виртуальной файловой системы на блочном устройстве

В этой статье подробно разбирается создание пользовательской файловой системы с помощью FUSE и языка Go. На реальном примере мы пройдём путь от установки окружения до реализации чтения, записи, метаданных и параллельного доступа. В процессе встретятся живые комментарии, личные наблюдения и советы, которые помогут избежать распространённых подводных камней.Введение Давно хотел понять, как сделать “файловую систему в файле” или на блочном устройстве, чтобы потом подключить её к любому Linux-серве…

  • вторник, 5 августа 2025 г. в 00:00:08
golang
Потоки, горутины, синхронизация и мьютексы в Go

Потому что 42...Go (Golang) создан для эффективной параллельной и конкурентной работы. Его killer feature — легковесные потоки выполнения, называемые горутины (goroutines), и мощные средства синхронизации. Приглашаю разобраться подробно.1. Что такое горутины и как они соотносятся с потоками?Обычные потоки (threads):В большинстве языков потоки создаются ОС, они "тяжёлые" (создание/переключение = дорого).Горутины (goroutines), это такой костыль go: Это "зелёные" потоки Go — намног…

  • понедельник, 4 августа 2025 г. в 00:00:05
golang
Построение долговечного хранилища данных с помощью HDFS

Привет! Меня зовут Роман Чечёткин, я разработчик в команде «Платформа коммуникаций» в Ozon Tech. Наша платформа предоставляет возможность другим командам отправлять различные сообщения в личные кабинеты пользователей.Сегодня хочу рассказать о задаче, которая встала перед нами — долгосрочное хранение всех сообщений (смс, электронные письма, пуши, уведомления), которые пользователь получил от Ozon.Почему мы, в принципе, должны хранить у себя данные? Некоторые коммуникации мы должны хранить не мен…

  • суббота, 2 августа 2025 г. в 00:00:10
golang
Барьеры памяти «Golang»

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

  • суббота, 2 августа 2025 г. в 00:00:09
golang
Построение долговечного хранилища данных

Привет! Меня зовут Роман Чечёткин, я разработчик в команде «Платформа коммуникаций» в Ozon Tech. Наша платформа предоставляет возможность другим командам отправлять различные сообщения в личные кабинеты пользователей.Сегодня хочу рассказать о задаче, которая встала перед нами — долгосрочное хранение всех сообщений (смс, электронные письма, пуши, уведомления), которые пользователь получил от Ozon.Почему мы, в принципе, должны хранить у себя данные? Некоторые коммуникации мы должны хранить не мен…

  • пятница, 1 августа 2025 г. в 00:00:11