Category : golang

golang
Прощай error-hell: альтернативная обработка ошибок

В эпоху становления асинхронного программирования JavaScript-разработчики столкнулись с явлением, получившим название "callback-hell" — бесконечной вложенностью функций обратного вызова. Хотя с точки зрения функционального программирования функции являются полноправными гражданами первого класса, принцип "всё хорошо в меру" никто не отменял. Появление Promise и механизма async/await стало спасительным решением этой проблемы. В мире Go у нас есть более элегантные инструменты — к…

  • суббота, 24 мая 2025 г. в 00:00:08
golang
Эти сложные map & slice в GO

В этой статье я хочу погрузиться в то, как работают некоторые структуры (далее ниже) в ГО. Хотя я и работаю с ГО уже 3й год, все равно есть вещи, в которые интересно погружаться. Хочу отметить, что я не буду погружаться прям сильно в реализацию того как устроены map и slice, скорее на столько, что бы понимать как они ведут себя и почему. Такое часто могут спрашивать на собеседованиях или это поможет писать более качественный и безопасный код.Итак на сколько мы знаем (я надеюсь, что и вы читаете…

  • суббота, 24 мая 2025 г. в 00:00:07
golang
Еще один вариант структуры go-приложения

Наверняка вам уже не раз попадалась на глаза статься, в которой рассказывают о том, какие пакеты и файлы нужно создать в вашем проекте, чтобы код получился легко расширяемым и поддерживаемым. Эта еще одна статья такого рода, посвященная декомпозиции проекта go на минимально зависимые друг от друга части. В качестве движущих сил декомпозиции будут использоваться следующие известные практики:архитектура слоев;предметно-ориентированное проектирование (DDD);разделение команд и запросов (CQS);архите…

  • пятница, 23 мая 2025 г. в 00:00:09
golang
Строки(strings) в Go

Строки — одна из самых часто используемых структур данных в любом языке программирования. И в Go они повсюду: от простых приветствий вроде "Hello, World!" до сложных парсеров, логгеров и сетевых протоколов. На первый взгляд, с ними всё просто: создал, склеил, обрезал — и пошёл дальше. Но как это часто бывает, под простотой скрываются тонкости, игнорирование которых может привести к ошибкам и снижению производительности.Go предлагает удобные, но специфичные механизмы работы со строками. …

  • пятница, 23 мая 2025 г. в 00:00:08
golang
Возвращаюсь к работе мозгом после месяцев кодинга с LLM

TLDR: LLM неплохо справляются с кодингом, но в больших проектах они пишут запутанный сумбур. Я уменьшил объём использования ИИ при кодинге и вернулся к работе головой, ручке и бумаге.Несколько месяцев назад мне нужно было создать новую инфраструктуру для моего SaaS, потому что связка из PHP+MySQL перестала отвечать нашим требованиям. Мне не терпелось воспользоваться этой возможностью, чтобы максимально задействовать все новые LLM, с которыми я экспериментировал. Поэтому я временно отказался от …

  • среда, 21 мая 2025 г. в 00:00:14
golang
Go-микросервисы: Стандартизация архитектуры с Clean Architecture и DDD

Рисунок 0. Как я писал статью на ХабрВведение: Проблемы современных Go-проектовВ Go-экосистеме сложилась парадоксальная ситуация: при наличии множества руководств по структуре проектов, разработчики продолжают сталкиваться с системными проблемами:Проблема внутреннего монолита. Кажущаяся модульность разбивается о практику размещения всей логики в internal/, где:73% проектов смешивают доменную логику с инфраструктурой (данные CodeScene 2023).Среднее время поиска нужного компонента превышает 15 ми…

  • среда, 21 мая 2025 г. в 00:00:13
golang
Мое автопротоколирование, начало создания полноценного сервиса

ДисклеймерВсем привет! В данной статье я поделюсь своим опытом написания сервиса. Я не являюсь опытным или профессиональным разработчиком, я пишу свой проект и мои решения могут быть не самыми оптимальными. Эта статья состоит в основном из ошибок, которые я совершил. Мой путь не является правильным и потому - судите "строго".Создание структуры проектаПервое, что приходит в голову при создании своего проекта, это как правильно организовать работу всего приложения, что с чем должно взаимо…

  • среда, 21 мая 2025 г. в 00:00:12
golang
Секреты дедлоков в Go

Всем привет! Меня зовут Дима, я лид команды государственных интеграций в Ozon Банке. Возможно вы видели мою статью про жизненный цикл горутин (если нет, советую заглянуть). Сегодня статья будет тоже про Go, а точнее про борьбу с дедлоками.Как-то раз я допустил в своем коде дедлок и, пока выкатывал пул-реквест с его фиксом, думал: «Ах, как бы было хорошо, если бы дедлоки определялись на этапе компиляции». Я решил немного разобраться в этом вопросе и в этой статье расскажу о том, что выяснил.Как …

  • вторник, 20 мая 2025 г. в 00:00:07
golang
Всегда используйте target_session_attrs=read-write (или primary) при подключении к кластеру Postgre…

При работе с кластерами PostgreSQL по fqdn, особенно в конфигурациях с высокой доступностью (High Availability, HA), разработчики часто сталкиваются с ошибками типа "cannot execute INSERT in a read-only transaction". Эти ошибки возникают, когда приложение пытается выполнить операцию записи на узел, который в данный момент является репликой (read-only). Особенно остро эта проблема проявляется в моменты переключения мастера: пул соединений вашего приложения может все еще содержать коннект…

  • вторник, 20 мая 2025 г. в 00:00:07