В какой-то момент моей карьеры меня перестало радовать ПО которое я разрабатывал.Больше всего мне нравилось работать с низкоуровневыми деталями и сложными алгоритмами. Но после перехода на пользовательские приложения эта часть работы почти исчезла. Теперь программирование казалось мне просто перемещением данных из одного места в другое с помощью уже готовых библиотек и инструментов. Знания, которые я получил раньше о программном обеспечении, уже не были такими полезными.Откровенно говоря, больш…
ВведениеВсем привет!Сегодня мы поговорим о том, как сделать вашу систему авторизации надежной, гибкой и простой в управлении с помощью библиотеки Casbin. Если вы когда-нибудь задумывались о том, как настроить права доступа в своем приложении, но вас пугала сложность этого процесса, то эта статья для вас. Мы разберем основные понятия и покажем, что настройка авторизации может быть не такой уж и сложной задачей.Casbin — это мощная и легко расширяемая библиотека для управления доступом, которая по…
Язык программирования Go известен своей простотой в использовании. Благодаря продуманному синтаксису, возможностям и инструментарию, Go позволяет писать легко читаемые и поддерживаемые программы произвольной сложности (см. этот список на GitHub). Некоторые инженеры-программисты называют Go «скучным» и «устаревшим», поскольку в нем отсутствуют передовые возможности других языков программирования, такие как монады, опциональные типы, LINQ, средства проверки заимствований, абстракции с нулевыми и…
Доброго дня! Хочу поделиться лайфхаком по реализации универсального способа пагинации в произвольных запроса к БД для получания списков.Имеем изначально задачу по реализации HTTP REST CRUD сервера на Go. База данных - PostgreSQL. Используемый драйвер - pgx - PostgreSQL Driver and Toolkit.Задача в общем тривиальная - сделать так, чтоб запросы получали на вход параметры пагинации (номер страницы, количество записей на страницу) и отдавали на выход поля таблицы и общее доступное количество страниц…
Почему появляются баги? Существует много причин, но если мы взглянем на конкретные примеры, то сможем увидеть закономерности — и спроектировать наши системы так, чтобы избежать целых классов ошибок. Под катом автор блога Considerations on Codecrafting рассматривает ошибки, связанные с наложением ссылок, предлагает методы их предотвращения и призывает внедрить эти методы на уровне проектирования новых языков. 1. Мой первый ArrayListПредположим, вы снова первокурсник, изучаете структуры данных и …
Данный способ - это всего лишь спортивный эксперимент, накиданный под вечер на коленке с целью что-нибудь исследовать.Задача была написать аналог 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,…
Недавно я увидел сообщение, демонстрирующее будущий дизайн итераторов для Go 1.23 (август 2024 года). Насколько я могу судить, многим людям этот дизайн не нравится. Я хотел высказать свои мысли по этому поводу как разработчик языка.Предложения по итераторам можно найти здесь.В нем есть подробное описание дизайна, объясняющее, почему были выбраны те или иные подходы, поэтому я рекомендую прочитать его, если вы знакомы с Go.Вот один из примеров:func Backward[E any](s []E) func(func(int, E) bool) …
HTTP-прокси - это программа для для выполнения HTTP-запросов клиента с другого IP-адреса.gRPC - система передачи данных на HTTP/2-транспорте и в качестве языка интерфейсов использующая Protocol Buffers.Я разработал HTTP-прокси pog-server, выложил в Open Source и хочу поделиться историей разработки. Собственно байты переносятся посредством gRPC:пользователь <=> pog-client <=gRPC=> pog-server <=> конечный HTTP-сервер ЗачемВ наше время программисту приходится использовать прокси-…
Всем привет! Меня зовут Павел Агалецкий, я ведущий разработчик юнита Platform as a Service в Авито. В этой статье мы научимся запускать и отлаживать приложения в Kubernetes и познакомимся с двумя инструментами: утилитой kubectl и консольным дашбордом k9s.Задача: запустить два приложения в KubernetesМы попытаемся запустить в Kubernetes два приложения, которые будут взаимодействовать друг с другом через вызовы API. Первое приложение — app1 — отвечает фразой Hello World и текущим значением времен…