Category : golang

golang
Почему итераторы в Go 1.23 многим так не нравятся

ПРИМЕЧАНИЕ: данный пост является адаптацией следующего твита (однако абсолютно самодостаточен): https://x.com/TheGingerBill/status/1802645945642799423TL;DR язык Go сейчас воспринимается как слишком “функциональный”, а не столь беззастенчиво  императивный язык.Недавно мне попался в твиттере пост, демонстрирующий, как будут устроены итераторы в Go 1.23 (эта версия выйдет в августе 2024 года). У меня складывается впечатление, будто многим в сообществе это нововведение не нравится. Я решил высказат…

  • вторник, 25 июня 2024 г. в 00:00:06
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