Привет, Хабр! В back in 2007 трое гуру из Google — Роб Пайк, Кен Томпсон и Роберт Гриземер — решили, что мир нуждается в чем-то свежем и быстром. Они метили на упрощение процесса разработки, но при этом хотели сохранить весь перфоманс на уровне C. И вот, в 2009 году появился Golang.Первые версии были далеки от совершенства, но с каждым релизом Go становился только круче. Garbage collector, goroutines, channels — эти фичи сделали Go особенным. С каждым апдейтом Go становился только быстрее и на…
Go – отличный язык для создания высокопроизводительных веб-приложений, а высокопроизводительные веб-приложения часто требуют централизованного кэширования.Использование Redis в Golang позволяет улучшить производительность приложения за счет ускорения доступа к данным. Кроме того, Redis предоставляет множество возможностей, таких как кэширование результатов запросов к базе данных, сохранение промежуточных вычислений и хранение временных данных, что может существенно сократить нагрузку на сервер…
Привет, Хабр! Protobuf, или Protocol Buffers, это бинарный формат сериализации, разработанный в Google для эффективного обмена данными между сервисами. Это как JSON, только компактнее, быстрее и типизированнее. Если JSON был вашим первым крашем в мире сериализации, то Protobuf – это тот, с кем вы хотите серьёзных отношений.Если вы хотите, чтобы ваши приложения общались между сервисами с молниеносной скоростью и минимальными задержками, тогда Protobuf — твой хороший выбор. УстановкаШаг 1: уста…
Go - один из немногих языков, в которых структуры можно передавать параметрами и возвращать из функций как по значению, так и по указателю. Это приводит к большей выразительности языка, но также разделяет общество разработчиков Go на два лагеря: сторонников указателей и сторонников значений.В данной статье предлагается во многом субъективное сравнение обоих способов и делается попытка убедить читателей передавать и возвращать значения в тех случаях, где это возможно.ЧитаемостьПараметрСамое про…
Салют Хабр и с наступающим новым годом! Каждое приложение стремится быть доступным 24/7, балансировка нагрузки становится настоящим мастхевом. В самом общем смысле, балансировка, это процесс распределения входящего трафика между несколькими серверами или ресурсами.Представьте себе мост, по которому одновременно пытаются пройти тысячи людей. Без правильной организации движения это превратится в хаос:То же самое происходит и в сетевых системах. Балансировка нагрузки - это наш дирижёр, который га…
Привет, Хабр! Меня зовут Рафаэль Мустафин, я ментор на курсе «Go-разработчик» в Яндекс Практикуме. Эта статья посвящена нюансам цикла range в Go. Мы рассмотрим распространённые подводные камни, лучшие практики и интересные изменения, ожидаемые в Go 1.22.Почему понимание цикла важно для Go-разработчика? В основе простоты и функциональности языка Go лежит его простой синтаксис. В частности, циклы, которые являются основным кирпичиком для построения большинства базовых задач программирования. Сре…
Всем привет! Недавно мне выпала возможность разработать шаблон сервиса, который можно было бы использовать как для монолитной, так и для микро-сервисной архитектуры. Шаблон должен был придерживаться принципов 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!") }Этот код выведет сообщение вместе с датой и временем его записи. Выглядит достаточно просто.Функции…