Всем привет! Недавно мне выпала возможность разработать шаблон сервиса, который можно было бы использовать как для монолитной, так и для микро-сервисной архитектуры. Шаблон должен был придерживаться принципов Domain-Driven Design (DDD). В этом процессе, я столкнулся с двумя интересными проблемами:Проблема 1: Сложности обеспечения транзакционности базы данных При разработке сервисов, часто возникает неотъемлемая потребность в использовании транзакций базы данных для обеспечения целостн…
Любой более или менее серьезный продакшен, работающий с базой данных, подразумевает процесс миграции - обновление структуры базы данных от одной версии до другой (обычно более новой) [источник].Миграции в БД можно делать вручную или использовать для этого специальные утилиты (фреймворки). В данной статье речь идет об утилите goose. Это инструмент миграции схемы, который обеспечивает управление миграциями схемы в проекте. Начиная с версии v3.16.0 goose поддерживает YDB - распределенную open-sou…
Привет, Хабр!Как в Golang логирование поживает? Рассмотрим этот вопрос в статье.Рассмотрим основные библиотеки и подходы.Логирование в GoCтандартная библиотека log дает вам все необходимое для логирования без внешних зависимостей.Для начала работы с log достаточно импортировать пакет и использовать его функции:import "log" func main() { log.Println("This is a log message!") }Этот код выведет сообщение вместе с датой и временем его записи. Выглядит достаточно просто.Функции…
Привет, Хабр!Дженерики (или generics) существуют во многих языках, таких как Java, C#, и Rust, но для Go это относительно новая фича, введенная в версии 1.18.До версии 1.18 Go был известен своим строгим и простым подходом к типизации. Однако, с ростом сообщества стало очевидно, что нужен более гибкий инструмент для работы с различными типами данных. Все вечно сталкивались с проблемами, когда им приходилось писать много шаблонного кода для разных типов данных или использовать интерфейсы и пусты…
Привет, Хабр!Fault-tolerant системы — это те, которые способны продолжать функционировать даже в условиях частичных сбоев или неисправностей. Основная фича таких систем заключается в том, чтобы обеспечить непрерывность работы приложения и безопасность данных даже при возникновении ошибок или непредвиденных ситуаций. Это достигается за счет ряда архитектурных и программных решений, направленных на предотвращение полного отказа системы при возникновении отдельных сбоев.Go благодаря своей простот…
гориллаПривет, Хабр!WebSocket позволяет открыть интерактивный коммуникационный сеанс между пользовательским браузером и сервером. Здесь большое отличие от традиционного HTTP, который ограничен моделью запрос-ответ и не подходит для сценариев, требующих постоянного обмена даннымиGo с помощью своей простоты и поддержкой конкурентности становится хорошим кандидатом для работы с WebSocket.Значение конкурентности в Go для работы с WebSocket. Горутины – это легковесные потоки исполнения, управляемы…
Одна из основных фич Go это система управления зависимостями. В начале своего пути Go полагался на GOPATH, что иногда вызывало сложности и ограничения для разработчиков. Однако с появлением Go Modules в Go версии 1.11, ситуация изменилась. Go Modules представили более гибкий инструмент для управления зависимостями, позволяя более эффективно управлять библиотеками и их версиями. Go Modules был введен в Go с версии 1.11 как официальная система управления зависимостями. Она позволяет автоматич…
Привет, коллеги! В Го toolchain это не просто buzzword, а реальная рабочая фича. Если вы провели немало времени, погружаясь в дебри кода и модулей, вы знаете, что каждая строчка и каждый пакет как и в любом япе имеют свое место и значение.ToolchainНабор инструментов или toolchain (тулчейн звучит покруче) используются для создания, тестирования, отладки и управления вашими Go-проектами:1. Компиляция и сборка (Build)go build — это команда, которая стоит в центре вашего Go-проекта. Она берет ваш …
В этой статье мы разберёмся, как можно интегрировать JavaScript-библиотеку js-dos в собственное решение Kubernetes, что позволит нам предоставлять доступ к играм MS-DOS в виде сервисов Kubernetes и запускать их в браузере. Кроме того, по ходу статьи я дам советы и рекомендации начального, продвинутого и высокого уровней по разработке собственных контроллеров Kubernetes при помощи Golang и Kubebuilder или Operator SDK. ▍ Введение js-dos — это JavaScript-библиотека, содержащая полнофункционал…