Всем привет! Меня зовут Дима, я лид команды государственных интеграций в 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 — и посмотрю, как изменится подход, скорость разработки, ощущения.Это не туториал «как пе…
Привет! Меня зовут Артём Блохин, я Go-разработчик в команде интеграций Островка. Сегодня поговорим о линтинге кода.Если бы «Сумерки» были про код, Эдвард — был линтером, а Белла — легаси-кодом, их диалог звучал бы так:— Линтер смотрел на этот код с болью и отвращением.— Какая глупая, забытая всеми кодовая база.— Ну, а разработчик, который взялся её чинить, — просто мазохист.Любой, кто пытался разобраться в старом коде без статики, знает: чем глубже копаешь, тем страшнее становится. В первой час…
За последние два года Go-сообщество выросло на 55% — с 3 млн до 4,7 млн разработчиков. Многие пришли в Go из других языков или только начинают свой путь в программировании. Без понимания идиоматики и ключевых особенностей языка даже опытные специалисты нередко сталкиваются с медленным кодом, дедлоками и утечками памяти.Так что сегодня разберём, как организовывать пакеты, обрабатывать ошибки, безопасно работать с горутинами и каналами, оптимизировать аллокации и профилировать «горячие» участки ч…
Заранее оговорюсь, всё что описано в данной статье, касается runtime (децентрализованного) кеша.Зачем нам такое может понадобиться? По нескольким причинам:У нас высокие требования к скорости работы приложения, дополнительные запросы к централизованному кешу нежелательны, с целью избежать сетевых взаимодействий.Компания не знает как готовить отказоустойчивый кеш (например redis), или просто не хочет/не может затягивать новую технологию, усложнять инфраструктуру.У нас нет четкого представления о …
Во время поддержки приложений, в особенности если они раскатаны на тысячи машин, в десятках различных версий и конфигураций - важно понимать с чем конкретно мы имеем дело. Речь именно про вопрос, которым озаглавлена эта статья, который я задаю глядя в терминал, когда вижу нежданную панику или ошибку. Мы должны мочь узнать какой версии и из какого источника собрано то или иное приложение. И далее речь зайдет о маркировке и версионировании бинарников собранных из go.По-существу, у нас есть три ва…