Category : golang

golang
Микросервисы с Go-Micro на примере

Привет, Хабр!Микросервисная архитектура представляет из себя подход, в котором каждый сервис отвечает за конкретную функциональность и может быть развернут, обновлен и масштабирован независимо от других. Go-Micro — это фреймворк, который упрощает создание таких микросервисов на Golang.Основные фичи Go-Micro:Автоматическое обнаружение сервисов: сервисы автоматом регистрируются и обнаруживаются.Встроенная балансировка нагрузки: запросы равномерно распределяются между экземплярами сервисов.Поддерж…

  • вторник, 25 июня 2024 г. в 00:00:05
golang
История переформатирования 100 000+ файлов Google в 2012 году

В сентябре далёкого 2012 года я трудился начинающим инженером в Google, занимаясь разработкой Bazel (инструмент сборки, внутри компании также известный под именем Blaze). Однажды мне на почту пришло загадочное приглашение из Google Календаря. Его прислали два инженера из США, пригласив на встречу меня и моего тимлида. Я сразу узнал имена отправителей — это были Роб Пайк и Расс Кокс. И хотя работать мне с ними не доводилось, я был о них наслышан. Расса Кокса я знал по его блогу, который любил…

  • понедельник, 24 июня 2024 г. в 00:00:06
golang
Анти-паттерны в Go Web Applications

В какой-то момент моей карьеры меня перестало радовать ПО которое я разрабатывал.Больше всего мне нравилось работать с низкоуровневыми деталями и сложными алгоритмами. Но после перехода на пользовательские приложения эта часть работы почти исчезла. Теперь программирование казалось мне просто перемещением данных из одного места в другое с помощью уже готовых библиотек и инструментов. Знания, которые я получил раньше о программном обеспечении, уже не были такими полезными.Откровенно говоря, больш…

  • понедельник, 24 июня 2024 г. в 00:00:05
golang
# Casbin — легко о сложном в авторизации

ВведениеВсем привет!Сегодня мы поговорим о том, как сделать вашу систему авторизации надежной, гибкой и простой в управлении с помощью библиотеки Casbin. Если вы когда-нибудь задумывались о том, как настроить права доступа в своем приложении, но вас пугала сложность этого процесса, то эта статья для вас. Мы разберем основные понятия и покажем, что настройка авторизации может быть не такой уж и сложной задачей.Casbin — это мощная и легко расширяемая библиотека для управления доступом, которая по…

  • суббота, 22 июня 2024 г. в 00:00:13
golang
Go развивается в неверном направлении

Язык программирования Go известен своей простотой в использовании. Благодаря продуманному синтаксису, возможностям и инструментарию, Go позволяет писать легко читаемые и поддерживаемые программы произвольной сложности (см. этот список на GitHub). Некоторые инженеры-программисты называют Go «скучным» и «устаревшим», поскольку в нем отсутствуют передовые возможности других языков программирования, такие как монады, опциональные типы, LINQ, средства проверки заимствований, абстракции с нулевыми и…

  • суббота, 22 июня 2024 г. в 00:00:11
golang
Go и pgx. Пагинация в запросах к БД Postgres

Доброго дня! Хочу поделиться лайфхаком по реализации универсального способа пагинации в произвольных запроса к БД для получания списков.Имеем изначально задачу по реализации HTTP REST CRUD сервера на Go. База данных - PostgreSQL. Используемый драйвер - pgx - PostgreSQL Driver and Toolkit.Задача в общем тривиальная - сделать так, чтоб запросы получали на вход параметры пагинации (номер страницы, количество записей на страницу) и отдавали на выход поля таблицы и общее доступное количество страниц…

  • суббота, 22 июня 2024 г. в 00:00:11
golang
Исправляем следующие 10 000 багов, связанных с наложением ссылок

Почему появляются баги? Существует много причин, но если мы взглянем на конкретные примеры, то сможем увидеть закономерности — и спроектировать наши системы так, чтобы избежать целых классов ошибок. Под катом автор блога Considerations on Codecrafting рассматривает ошибки, связанные с наложением ссылок, предлагает методы их предотвращения и призывает внедрить эти методы на уровне проектирования новых языков. 1. Мой первый ArrayListПредположим, вы снова первокурсник, изучаете структуры данных и …

  • пятница, 21 июня 2024 г. в 00:00:06
golang
Ускоряем sync.Map на 73% за 40 строк кода

Данный способ - это всего лишь спортивный эксперимент, накиданный под вечер на коленке с целью что-нибудь исследовать.Задача была написать аналог sync.Map максимально приближенный по производительности к оригиналу, спортивного интереса ради.Давайте сразу к коду и бенчмаркам:package main import ( "hash/fnv" "sync" ) type bucket struct { data sync.Map } type FastSyncMap struct { buckets []*bucket } func NewSyncMap(bucketCount int) *FastSyncMap { buckets := make([]*bucket,…

  • четверг, 20 июня 2024 г. в 00:00:11
golang
Почему люди злятся из-за итераторов в Go 1.23

Недавно я увидел сообщение, демонстрирующее будущий дизайн итераторов для Go 1.23 (август 2024 года). Насколько я могу судить, многим людям этот дизайн не нравится. Я хотел высказать свои мысли по этому поводу как разработчик языка.Предложения по итераторам можно найти здесь.В нем есть подробное описание дизайна, объясняющее, почему были выбраны те или иные подходы, поэтому я рекомендую прочитать его, если вы знакомы с Go.Вот один из примеров:func Backward[E any](s []E) func(func(int, E) bool) …

  • среда, 19 июня 2024 г. в 00:00:04