Привет, Хабр!Все знают, что SOLID и DRY делают код более чистым, гибким и, что немаловажно, понятным для других разрабов. Каждый компонент выполняет свою функцию и вместе они создают гармонию. В этой статье рассмотрим как эти принципы применяются в golang. SOLIDSingle Responsibility Principle гласит, что класс или модуль должен иметь только одну причину для изменения. Корочег говоря - каждый класс или функция должны решать лишь одну задачу, не более. Если у вас есть функция или класс, который …
Привет! Меня зовут Дмитрий Королёв, я бэкенд-разработчик в Авито. В большинстве современных приложений используется сериализация данных: для передачи данных между клиентом и сервером, для хранения сложных структур в базах данных, при передаче информации между микросервисами или отправке сообщений в очереди.Правильный выбор формата сериализации может существенно повлиять на производительность приложения, размер передаваемых данных и читаемость кода. В этой статье я покажу бенчмарки нескольких с…
Возникла на днях достаточно интересная задачка - по образу сайта https://www.howsmyssl.com/ получить на страничке список Cipher Suites которые при TLS Handshake клиент передает в своем Client hello.А заодно обдумать инструмент, который позволит работать с другими типами заголовков, в частности - Proxy-Connection.В качестве основного веб сервера с которым я имею дело выступает Nginx, точнее его сборка Openresty с интерпретатором LuaJIT для скриптов Lua.Основная проблематика связана с тем, что в…
Приветствую тебя, хаброжитель!В этой статье разберём 100 вопросов, они покрывают львиную долю того, что могут спросить на собеседовании джуниор Go-разработчика с практически любой специализацией. Конечно же, в реальной работе на Go требуются немного другие скиллы, чем умение быстро ответить на любой вопрос. Однако сложилась добрая традиция делать из собеседования викторину с главным призом в виде трудоустройства — к этому нужно быть готовым.Тем не менее, я уверен, что эта статья будет очень по…
Привет, Хабр! В 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, балансировка нагрузки становится настоящим мастхевом. В самом общем смысле, балансировка, это процесс распределения входящего трафика между несколькими серверами или ресурсами.Представьте себе мост, по которому одновременно пытаются пройти тысячи людей. Без правильной организации движения это превратится в хаос:То же самое происходит и в сетевых системах. Балансировка нагрузки - это наш дирижёр, который га…