Category : golang

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
golang
Добавляем платежную систему FreeKassa в проект на Go

Привет! Хочу поделиться гайдом по интеграции FreeKassa в проект на Golang.В данной статье будут рассмотрены:Создание инвойса.Обработка оповещения об успешной оплате.Регистрация и создание магазинаРегистрируемся на https://freekassa.net.После регистрации на странице вы увидеть кнопку "Добавить кассу":Интерфейс главной страницы FreeKassaНажимаем, чтобы создать кассу (магазин).В открывшемся окне выбираем тип нашего магазина, в моем случае - это TG-бот. После жмем продолжить:Название сайта …

  • суббота, 17 мая 2025 г. в 00:00:09
golang
Graceful Shutdown в Go на практике

Graceful Shutdown в Go на практикеКорректное завершение любого приложения обычно делает три вещи:Закрывает точку входа для новых запросов или сообщений из HTTP, pub/sub источников и т.д. При этом исходящие соединения с базами данных, кешами сохраняются активными.Ждет завершения всех исходящих запросов. Если запрос работает слишком долго, возвращается корректная ошибка.Освобождает важные ресурсы, как базы данных, блокировки на файлы или подписки на сетевые источники.Эта статья фокусируется на ра…

  • суббота, 17 мая 2025 г. в 00:00:08
golang
Как я ушёл с Kotlin (Spring Boot) на Go (Gin) и сделал AI-чат с WebSocket и GPT-4

Меня зовут Артём, я занимаюсь коммерческой разработкой с 2019 года. Последние несколько лет я активно использовал Spring Boot для создания backend-сервисов на Java и Kotlin.Но в какой-то момент захотелось попробовать что-то новое. Не потому что Spring надоел, а просто чтобы выйти из зоны комфорта и узнать, как чувствует себя проект на другом языке. Я решил: возьму уже начатый pet-проект, перепишу его на Go — и посмотрю, как изменится подход, скорость разработки, ощущения.Это не туториал «как пе…

  • суббота, 17 мая 2025 г. в 00:00:07
golang
В поисках хорошего стиля. Часть 2. Пишем свой линтер на Go для golangci-lint

Привет! Меня зовут Артём Блохин, я Go-разработчик в команде интеграций Островка. Сегодня поговорим о линтинге кода.Если бы «Сумерки» были про код, Эдвард — был линтером, а Белла — легаси-кодом, их диалог звучал бы так:— Линтер смотрел на этот код с болью и отвращением.— Какая глупая, забытая всеми кодовая база.— Ну, а разработчик, который взялся её чинить, — просто мазохист.Любой, кто пытался разобраться в старом коде без статики, знает: чем глубже копаешь, тем страшнее становится. В первой час…

  • пятница, 16 мая 2025 г. в 00:00:14
golang
Секреты эффективного кодирования на Go для опытных и новичков: профайлинг, тесты, CI

За последние два года Go-сообщество выросло на 55% — с 3 млн до 4,7 млн разработчиков. Многие пришли в Go из других языков или только начинают свой путь в программировании. Без понимания идиоматики и ключевых особенностей языка даже опытные специалисты нередко сталкиваются с медленным кодом, дедлоками и утечками памяти.Так что сегодня разберём, как организовывать пакеты, обрабатывать ошибки, безопасно работать с горутинами и каналами, оптимизировать аллокации и профилировать «горячие» участки ч…

  • пятница, 16 мая 2025 г. в 00:00:13
golang
Синхронизация кеша в распределенных Go (и не только) приложениях с помощью Kafka

Заранее оговорюсь, всё что описано в данной статье, касается runtime (децентрализованного) кеша.Зачем нам такое может понадобиться? По нескольким причинам:У нас высокие требования к скорости работы приложения, дополнительные запросы к централизованному кешу нежелательны, с целью избежать сетевых взаимодействий.Компания не знает как готовить отказоустойчивый кеш (например redis), или просто не хочет/не может затягивать новую технологию, усложнять инфраструктуру.У нас нет четкого представления о …

  • четверг, 15 мая 2025 г. в 00:00:10
golang
Кто ты, воин? Версионирование go бинарников

Во время поддержки приложений, в особенности если они раскатаны на тысячи машин, в десятках различных версий и конфигураций - важно понимать с чем конкретно мы имеем дело. Речь именно про вопрос, которым озаглавлена эта статья, который я задаю глядя в терминал, когда вижу нежданную панику или ошибку. Мы должны мочь узнать какой версии и из какого источника собрано то или иное приложение. И далее речь зайдет о маркировке и версионировании бинарников собранных из go.По-существу, у нас есть три ва…

  • четверг, 15 мая 2025 г. в 00:00:09