Строки — одна из самых часто используемых структур данных в любом языке программирования. И в Go они повсюду: от простых приветствий вроде "Hello, World!" до сложных парсеров, логгеров и сетевых протоколов. На первый взгляд, с ними всё просто: создал, склеил, обрезал — и пошёл дальше. Но как это часто бывает, под простотой скрываются тонкости, игнорирование которых может привести к ошибкам и снижению производительности.Go предлагает удобные, но специфичные механизмы работы со строками. …
TLDR: LLM неплохо справляются с кодингом, но в больших проектах они пишут запутанный сумбур. Я уменьшил объём использования ИИ при кодинге и вернулся к работе головой, ручке и бумаге.Несколько месяцев назад мне нужно было создать новую инфраструктуру для моего SaaS, потому что связка из PHP+MySQL перестала отвечать нашим требованиям. Мне не терпелось воспользоваться этой возможностью, чтобы максимально задействовать все новые LLM, с которыми я экспериментировал. Поэтому я временно отказался от …
Рисунок 0. Как я писал статью на ХабрВведение: Проблемы современных Go-проектовВ Go-экосистеме сложилась парадоксальная ситуация: при наличии множества руководств по структуре проектов, разработчики продолжают сталкиваться с системными проблемами:Проблема внутреннего монолита. Кажущаяся модульность разбивается о практику размещения всей логики в internal/, где:73% проектов смешивают доменную логику с инфраструктурой (данные CodeScene 2023).Среднее время поиска нужного компонента превышает 15 ми…
ДисклеймерВсем привет! В данной статье я поделюсь своим опытом написания сервиса. Я не являюсь опытным или профессиональным разработчиком, я пишу свой проект и мои решения могут быть не самыми оптимальными. Эта статья состоит в основном из ошибок, которые я совершил. Мой путь не является правильным и потому - судите "строго".Создание структуры проектаПервое, что приходит в голову при создании своего проекта, это как правильно организовать работу всего приложения, что с чем должно взаимо…
Всем привет! Меня зовут Дима, я лид команды государственных интеграций в Ozon Банке. Возможно вы видели мою статью про жизненный цикл горутин (если нет, советую заглянуть). Сегодня статья будет тоже про Go, а точнее про борьбу с дедлоками.Как-то раз я допустил в своем коде дедлок и, пока выкатывал пул-реквест с его фиксом, думал: «Ах, как бы было хорошо, если бы дедлоки определялись на этапе компиляции». Я решил немного разобраться в этом вопросе и в этой статье расскажу о том, что выяснил.Как …
При работе с кластерами PostgreSQL по fqdn, особенно в конфигурациях с высокой доступностью (High Availability, HA), разработчики часто сталкиваются с ошибками типа "cannot execute INSERT in a read-only transaction". Эти ошибки возникают, когда приложение пытается выполнить операцию записи на узел, который в данный момент является репликой (read-only). Особенно остро эта проблема проявляется в моменты переключения мастера: пул соединений вашего приложения может все еще содержать коннект…
Привет! Хочу поделиться гайдом по интеграции FreeKassa в проект на Golang.В данной статье будут рассмотрены:Создание инвойса.Обработка оповещения об успешной оплате.Регистрация и создание магазинаРегистрируемся на https://freekassa.net.После регистрации на странице вы увидеть кнопку "Добавить кассу":Интерфейс главной страницы FreeKassaНажимаем, чтобы создать кассу (магазин).В открывшемся окне выбираем тип нашего магазина, в моем случае - это TG-бот. После жмем продолжить:Название сайта …
Graceful Shutdown в Go на практикеКорректное завершение любого приложения обычно делает три вещи:Закрывает точку входа для новых запросов или сообщений из HTTP, pub/sub источников и т.д. При этом исходящие соединения с базами данных, кешами сохраняются активными.Ждет завершения всех исходящих запросов. Если запрос работает слишком долго, возвращается корректная ошибка.Освобождает важные ресурсы, как базы данных, блокировки на файлы или подписки на сетевые источники.Эта статья фокусируется на ра…
Меня зовут Артём, я занимаюсь коммерческой разработкой с 2019 года. Последние несколько лет я активно использовал Spring Boot для создания backend-сервисов на Java и Kotlin.Но в какой-то момент захотелось попробовать что-то новое. Не потому что Spring надоел, а просто чтобы выйти из зоны комфорта и узнать, как чувствует себя проект на другом языке. Я решил: возьму уже начатый pet-проект, перепишу его на Go — и посмотрю, как изменится подход, скорость разработки, ощущения.Это не туториал «как пе…