На medium.com есть ряд статей со сравнением простых web-сервисов, написанных на разных языках. Одна из них Go vs Rust: Performance comparison for JWT verify and MySQL query и судя по ней, Go на 42% быстрее чем Rust. Я решил перепроверить и заодно поменять Gin на Fiber, Axis на Axum и MySQL на PostgreSQL.Web-сервис будет принимать запрос с аутентификацией по токену JWT, искать в БД пользователя с данным email из JWT и возвращать его в виде json. Так как подобная аутентификация используется повс…
Рост генеративного ИИ, API OpenAI и локальные LLM, влияют на то, как мы разрабатываем приложения. У разработчиков на Python и JavaScript есть много инструментов, особо популярен LangChain. Однако, у гошников вариантов меньше. LangChainGo, порт оригинального LangChain, пытается маппить питонячие концепции на го, получается не слишком идеоматично. К тому же, есть ощущение, что LangChain сам по себе переусложнен.Из-за потребности в простом, но мощном инструменте для Go, мы разработали Agency. Эта…
Всем доброго времени суток! Имея за плечами многолетний опыт разработки в Java, а точнее в Spring Framework и начав разрабатывать на языке Go в промышленных масштабах, я стал сталкиваться с такой проблемой, что мне действительно не хватает многих фишек из Spring'a. И одна из этих проблем: указание переменной среды в качестве параметра в конфигурационных yaml-файлахДля автоматизации деплоя, использования различных правил сборки проблема вставала все острее и острее. Я поисследовал различные…
В Go ввели generics и он потерял одно из своих основных преимуществ: легкую читаемость.Накидал простой пример:package main import "fmt" type MyObj[T int] struct{ a T } type MyObj2[T MyObj[E], E int] struct{ b T } type MyObj3[T MyObj2[A, E], A MyObj[E], E int] struct{ с T } type MyObj4[T MyObj3[B, A, E], B MyObj2[A, E], A MyObj[E], E int] struct{ d T } func main() { my := MyObj[int]{a: 10} my2 := MyObj2[MyObj[int], int]{b: my} my3 := MyObj3[MyObj2[MyObj[int], int], MyObj[int], int]…
Всем привет! Кратко обо мне: меня зовут Никита и я уже третий год работаю над тем, чтобы платформа СберМаркета становилась лучше день ото дня. Мой основной язык программирования — Go, но, учитывая специфику платформенной разработки, еще и bash.В этой статье на примерах разберу, что мешает строить разработчикам надежные интеграции, попутно заглядывая в детали реализации нашей утилиты sbm-cli, шаблона микросервиса и CI/CD. Этот материал я написал в соавторстве с моим коллегой Эмилем Шарифуллиным…
Эта заметка о том, зачем нам нужен пакет coroutine для Go и как он будет выглядеть. Но прежде всего, что такое корутины?Сегодня каждый программист знаком с вызовами функций (подпрограмм): F вызывает G, которая останавливает F и запускает G. G выполняет свою работу, потенциально вызывая и ожидая другие функции, и в конце концов возвращается. Когда G возвращается, G уже нет, а F продолжает работать. В этой схеме одновременно выполняется только одна функция, а ее вызывающие ожидают, поднимаясь вв…
Привет, Хабр!Каждая миллисекунда имеет значение, микрооптимизация это must have, особенно на языке Go. Казалось бы, современные пекарни настолько мощные, что могут простить нам небольшую неэффективность. Однако, когда дело доходит до масштабируемых систем и высоконагруженных приложений, каждая лишняя аллокация памяти и каждый неоптимальный цикл могут привести к значительному снижению производительности. Микрооптимизации позволяют добиться максимальной эффективности и производительности.Особен…
В этой статье мы научимся писать полноценный gRPC сервис на Go на примере сервера авторизации с полноценной архитектурой, готовой к продакшену. Мы напишем как серверную часть, так и клиентскую. В качестве клиента мы возьмём мой сервис — URL Shortener, о котором у меня также есть статья и видео-гайд на ютубе. Попутно мы познакомимся с базовыми подходами к работе с авторизацией. И в конце настроим автоматический деплой сервиса с помощью GitHub Actions на удалённый сервер. Видео-версия этого гай…
С чего все началосьМы с друзьями купили лед ленту с управлением по блютузу и повесили её в зале. В приложении была прикольная функция цветомузыки, но она была недостаточно хороша. Так что я решил реализовать её самому.Шаги к реализацииНаучиться отправлять свои данные на блютуз контроллерАнализировать аудиопоток, находит резкие изменения в бите.Скрестить два скриптаНаписать обертку для удобной работыКак понять что отправлять на блютуз контроллер?У нас есть рабочее приложение для контроля лед ле…