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

Go *

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

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

SOLID и DRY в Go

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

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

Все знают, что SOLID и DRY делают код более чистым, гибким и, что немаловажно, понятным для других разрабов. Каждый компонент выполняет свою функцию и вместе они создают гармонию.

В этой статье рассмотрим как эти принципы применяются в golang.

Читать далее

RPC на примере gRPC. Когда применять и как работает

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

Доброго времени суток, коллеги. Я go разработчик, по-этому примеры будут преимущественно на нём. Хочу порассуждать о методах взаимодействия сервисов. Тема очень обширна. Зачастую мы пользуемся реализациями, которые не всегда подходят, т.к. не знаем куда применить ту или иную технологию. Я хочу попытаться начать закрывать этот пробел как у себя, так и у людей. Любые комментарии и конструктивные исправления приветствуются.

В данной статье хочу разобрать как работает gRPC, что он может, а так же когда и зачем его использовать.

Узнать ->

TLS Client Hello — перехватываем и парсим — Nginx + Lua / Go

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

Возникла на днях достаточно интересная задачка - по образу сайта https://www.howsmyssl.com/ получить на страничке список Cipher Suites которые при TLS Handshake клиент передает в своем Client hello.

А заодно обдумать инструмент, который позволит работать с другими заголовками, в частности - Proxy-Connection

Читать далее

Кратко про то, как устроен компилятор Go

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

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

В back in 2007 трое гуру из Google — Роб Пайк, Кен Томпсон и Роберт Гриземер — решили, что мир нуждается в чем-то свежем и быстром. Они метили на упрощение процесса разработки, но при этом хотели сохранить весь перфоманс на уровне C. И вот, в 2009 году появился Golang.

Первые версии были далеки от совершенства, но с каждым релизом Go становился только круче. Garbage collector, goroutines, channels — эти фичи сделали Go особенным. С каждым апдейтом Go становился только быстрее и надежнее. И не забудем про экосистему — с каждым годом она росла как на дрожжах, предлагая всё новые инструменты и библиотеки.

С версии 1.5 компилятор Go сам начал компилироваться в Go. С тех пор производительность только растет. JIT, улучшения в escape analysis, введение модулей в версии 1.11 — каждая фича делала Go всё более мощным.

В последниях версиях появились дженерики, которые все так долго ждали. Это был следующий шаг в удобстве написания кода в go.

Читать далее

Сериализация данных в Golang с Protobuf

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

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

Protobuf, или Protocol Buffers, это бинарный формат сериализации, разработанный в Google для эффективного обмена данными между сервисами. Это как JSON, только компактнее, быстрее и типизированнее. Если JSON был вашим первым крашем в мире сериализации, то Protobuf – это тот, с кем вы хотите серьёзных отношений.

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

Читать далее

Go: передача значений VS передача указателей

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

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

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

Читать далее

Range Loop в Go: подводные камни, как с ними бороться и что нас ждёт в версии 1.22

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

Привет, Хабр! Меня зовут Рафаэль Мустафин, я ментор на курсе «Go-разработчик» в Яндекс Практикуме. Эта статья посвящена нюансам цикла range в Go. Мы рассмотрим распространённые подводные камни, лучшие практики и интересные изменения, ожидаемые в Go 1.22.

Читать далее

Паттерн Unit of Work в разрезе чистой архитектуры DDD на языке Golang

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

Всем привет! Недавно мне выпала возможность разработать шаблон сервиса, который можно было бы использовать как для монолитной, так и для микро‑сервисной архитектуры. Шаблон должен был придерживаться принципов Domain‑Driven Design (DDD). В этом процессе, я столкнулся с двумя интересными проблемами:

Проблема 1: Сложности обеспечения транзакционности базы данных

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

Проблема 2: Нарушение изолированности слоя

В попытке решить первую проблему, некоторые разработчики переносят работу с транзакциями на уровень слоя приложения, чтобы избежать прямой зависимости от базы данных. Однако, такой подход, несмотря на его обоснование, может нарушить изолированность слоев и противоречить принципам DDD и чистой архитектуры. Это, в конечном итоге, затрудняет поддержку приложения и усложняет его масштабирование.
Эти две проблемы стали отправной точкой для исследования применения паттерна Unit of Work и его роли в обеспечении надежности и консистентности данных в контексте Golang и DDD.

В статье я расскажу о своем подходе к решению этих задач.

Читать далее

Миграции в YDB с помощью «goose»

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

Любой более или менее серьезный продакшен, работающий с базой данных, подразумевает процесс миграции - обновление структуры базы данных от одной версии до другой (обычно более новой) [источник].

Миграции в БД можно делать вручную или использовать для этого специальные утилиты (фреймворки). В данной статье речь идет об утилите goose. Это инструмент миграции схемы, который обеспечивает управление миграциями схемы в проекте. Начиная с версии v3.16.0 goose поддерживает YDB - распределенную open-source СУБД. В данной статье мы будем разбирать кейс применения миграций конкретно в YDB.

Читать далее

Логирование в Golang

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

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

Как в Golang логирование поживает? Рассмотрим этот вопрос в статье.

Рассмотрим основные библиотеки и подходы.

Читать далее

Дженерики в go

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

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

Дженерики (или generics) существуют во многих языках, таких как Java, C#, и Rust, но для Go это относительно новая фича, введенная в версии 1.18 в 2022 году.

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

Go представила предложение по введению дженериков, которое после долгих обсуждений и тестирований было реализовано в версии 1.18. Это был ответ на просьбу сообщества. + к карме

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

Читать далее

Алгоритмы балансировки нагрузки на Go

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

Салют Хабр и с наступающим новым годом!

Каждое приложение стремится быть доступным 24/7, балансировка нагрузки становится настоящим мастхевом.

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

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

Читать далее

Проектирование fault-tolerant систем на Go

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

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

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

Go благодаря своей простоте, производительности и, что наиболее важно, поддержке конкурентности на уровне языка, становится идеальным выбором для создания fault-tolerant систем.

Читать далее

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

WebSocket в Go и причем тут горилла

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

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

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

Go с помощью своей простоты и поддержкой конкурентности становится хорошим кандидатом для работы с WebSocket.

Читать далее

Toolchain в Go

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

Привет, коллеги! В Го toolchain (цепочка инструментов) это не просто buzzword, а реальная рабочая фича. Если вы провели немало времени, погружаясь в дебри кода и модулей, вы знаете, что каждая строчка и каждый пакет как и в любом япе имеют свое место и значение.

Цепочка инструментов или toolchain (тулчейн звучит покруче) используются для создания, тестирования, отладки и управления вашими Go-проектами.

Читать далее

Создание эмулятора игр MS-DOS в Kubernetes

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

В этой статье мы разберёмся, как можно интегрировать JavaScript-библиотеку js-dos в собственное решение Kubernetes, что позволит нам предоставлять доступ к играм MS-DOS в виде сервисов Kubernetes и запускать их в браузере.

Кроме того, по ходу статьи я дам советы и рекомендации начального, продвинутого и высокого уровней по разработке собственных контроллеров Kubernetes при помощи Golang и Kubebuilder или Operator SDK.
Читать дальше →

Event Sourcing и CQRS в Go

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

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

Сегодня мы поговорим о двух концепциях — Event Sourcing и CQRS, и их реализации на языке Go. Go предоставляет хорошие возможности для реализации этих паттернов благодаря своей производительности, простоте и поддержке конкурентности «из коробки».

Читать далее

Управление зависимостями в Go

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


Одна из основных фич Go это система управления зависимостями. В начале своего пути Go полагался на GOPATH, что иногда вызывало сложности и ограничения для разработчиков. Однако с появлением Go Modules в Go версии 1.11, ситуация изменилась. Go Modules представили более гибкий инструмент для управления зависимостями, позволяя более эффективно управлять библиотеками и их версиями.

Go Modules был введен в Go с версии 1.11 как официальная система управления зависимостями. Она позволяет автоматически загружать зависимости, управлять версиями, и облегчает совместную работу.
Читать дальше →

Автоматизация работы программиста golang

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

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

Читать далее

Object-Relational Mapping (ORM) в Golang

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

Одна из самых важных задач ЯП`s это эффективное взаимодействие с базами данных и Go не исключение. В Go есть парадигма Object-Relational Mapping (ORM), позволяет работать с реляционными базами данных в терминах объектно-ориентированного программирования. Это очень сильно упрощает работу с базами данных, позволяя сосредоточиться на бизнес-логике приложения, а не на нюансах SQL-запросов.

GORM (Go Object-Relational Mapping) предоставляет удобный интерфейс для взаимодействия с различными базами данных, сохраняя при этом идиоматичность и фичу конкуретности в Go.

Читать далее

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