Sharding — это стратегия горизонтального масштабирования, которая разбивает данные на сегменты («шарды») таким образом, чтобы каждая часть хранилась отдельно и обрабатывалась независимо.
В контексте распределённого кэша, шардинг используется для разделения данных между несколькими узлами с целью:
При шардинге каждый ключ привязывается к определённому узлу на основе функции хэширования. Алгоритм хэширования принимает ключ (например, строку) и возвращает число, которое определяет, на какой узел будут записаны или считаны данные.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🥱1
Этот Gron — инструмент командной строки, который превращает JSON в плоский, читаемый формат, удобный для поиска и фильтрации
Пример JSON:
{
"user": {
"name": "Alice",
"languages": ["Go", "Python"]
}
}
После обработки Gron:
json = {};
json.user = {};
json.user.name = "Alice";
json.user.languages = [];
json.user.languages[0] = "Go";
json.user.languages[1] = "Python";
Теперь легко искать данные через grep, например:
gron data.json | grep "languages"
Где применить: анализ API-ответов, работа с JSON-файлами в терминале.
Второй Gron — это библиотека для написания и запуска cron job-ов в Go с минималистичным интерфейсом. Она предлагает простой и гибкий API для задания расписаний, управления задачами и настройки пользовательских типов заданий.
Основные возможности:
Простое создание периодических расписаний (Every).
Поддержка расписаний на уровне дня, недели, месяца.
Определение задач через интерфейс gron.Job.
Возможность выполнения задач асинхронно.
Настройка времени запуска через метод .At(hh:mm).
Возможность использовать кастомные расписания.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🥱6
Причины случайного порядка в map:
Go использует хэш-таблицу для хранения данных в map. Элементы сохраняются по хэшированным ключам, и их порядок в памяти зависит от того, как хэш-функция распределяет данные. Это позволяет обеспечить:
Оптимальное использование памяти.
Защита от зависимости от порядка
Если бы порядок был фиксированным, программисты могли бы начать на него полагаться, что привело бы к сложным багам при изменении реализации map. Случайность в порядке обхода вынуждает писать код, который явно не зависит от этого порядка.
Go намеренно перемешивает порядок элементов в map между запусками программы. Это делает сложнее предсказать хэш-функцию и эксплуатировать уязвимости, связанные с предсказуемым порядком.
Гарантированный порядок потребовал бы дополнительной логики в реализации map, что увеличило бы сложность кода рантайма и ухудшило производительность.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤4👏1
🛠🐹 Что такое линтеры в Go и зачем они нужны
Если вы пишете код на Go, наверняка хотите, чтобы он был качественным, понятным и поддерживаемым. Здесь на помощь приходят линтеры — инструменты, которые анализируют ваш код и подсказывают, как его улучшить.
Что делает линтер?
Линтер проверяет код на:
✅ Ошибки стиля (например, неправильные имена переменных).
✅ Потенциальные баги (неиспользуемые переменные, забытые defer).
✅ Неоптимальный код (лишние вычисления, неэффективные алгоритмы).
✅ Соответствие стандартам (следование Go Code Review Comments).
Популярные линтеры для Go:
➖ golint — проверяет стиль кода, соответствие рекомендациям Go (устарел, но до сих пор используется).
➖ staticcheck — мощный инструмент для обнаружения багов и улучшения кода.
➖ golangci-lint — удобный инструмент, объединяющий несколько линтеров. Поддерживает кастомизацию и интеграцию с CI.
➖ errcheck — проверяет, обрабатываете ли вы ошибки из функций.
➖ gosec — находит уязвимости в коде (например, небезопасные вызовы).
➖ revive — современный, быстрый линтер, который заменяет golint.
🐸 Библиотека Go разработчика
Если вы пишете код на Go, наверняка хотите, чтобы он был качественным, понятным и поддерживаемым. Здесь на помощь приходят линтеры — инструменты, которые анализируют ваш код и подсказывают, как его улучшить.
Что делает линтер?
Линтер проверяет код на:
Популярные линтеры для Go:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🥱5❤2👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Если вы пишете на Go, скорее всего, вы знакомы с его минималистичным, но мощным подходом. Goroutines, каналы, лаконичный синтаксис – это то, что делает язык незаменимым для высоконагруженных систем и микросервисов. Но вот вы заходите на LeetCode и сталкиваетесь с задачей: «Найти k-й по величине элемент в массиве».
Давайте разберемся, так ли нужна вам такая головоломка.
❓Почему стоит попробовать?
Go абстрагирует многие низкоуровневые детали, но это не значит, что они не важны. Решение задач заставляет углубляться в такие детали. Вы не просто пишете код – вы понимаете, что стоит за ним.
В реальных задачах вы часто сталкиваетесь с багами из-за некорректной работы с горутинами. Задачи, связанные с многопоточностью, дают шанс разобраться, как правильно использовать каналы и синхронизацию данных.
На собеседованиях вас почти наверняка попросят решить пару задач на алгоритмы. LeetCode – отличный тренажер, чтобы не ударить в грязь лицом.
➖Go – это не академия алгоритмов
Если вы работаете над реальным продуктом, вам не нужно каждый день искать минимальное остовное дерево или реализовывать сложные структуры данных. Вместо того чтобы писать свой бинарный поиск, вы просто используете sort.Search.
➖Реальная разработка – это не про задачи
Go-разработчику лучше сосредоточиться на проектировании микросервисов, оптимизации REST API или настройке CI/CD. Это то, что реально поможет вам стать ценным сотрудником.
➖Потенциальная ловушка перфекционизма
Вы пытаетесь улучшить время работы своей программы, хотя это не имеет значения в реальных условиях. В реальных проектах важнее качество кода и его читабельность, а не сокращение выполнения алгоритма с O(n²) до O(n log n).
Please open Telegram to view this post
VIEW IN TELEGRAM
💯24👍9👏6🌚3😢1
Компания JetBrains объявила о запуске программы раннего доступа (EAP) для GoLand. В этом выпуске основное внимание уделяется следующим улучшениям:
Первую сборку EAP можно загрузить через Toolbox App, с официального сайта или в виде snap-пакета для Ubuntu. Также доступно обновление из самой GoLand через настройки обновлений.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12👍5❤3🥱3
Структуры данных без блокировок
Lock-Free структуры данных — это конструкции, обеспечивающие многопоточный доступ к данным без использования блокировок (мьютексов). Вместо этого они используют атомарные операции, такие как Compare-And-Swap (CAS). Это позволяет минимизировать задержки, устранить deadlock и повысить производительность в конкурентной среде.
Зачем они нужны?
➡️ Высокая производительность: нет затрат на ожидание блокировок.
➡️ Отсутствие deadlock: исключение взаимоблокировок.
➡️ Скалируемость: отлично работают при высокой конкуренции потоков.
Основные инструменты в Go
➖ Пакет sync/atomic:
Атомарные операции для целых чисел, указателей и других типов.
Пример:
➖ CAS (Compare-And-Swap):
Обновляет значение только если текущее равно ожидаемому. Это основа большинства Lock-Free алгоритмов.
🐸 Библиотека Go разработчика
Lock-Free структуры данных — это конструкции, обеспечивающие многопоточный доступ к данным без использования блокировок (мьютексов). Вместо этого они используют атомарные операции, такие как Compare-And-Swap (CAS). Это позволяет минимизировать задержки, устранить deadlock и повысить производительность в конкурентной среде.
Зачем они нужны?
Основные инструменты в Go
Атомарные операции для целых чисел, указателей и других типов.
Пример:
atomic.AddInt32(&counter, 1)
// Увеличение
atomic.CompareAndSwapInt32(&counter, old, new)
// Сравнить и заменить
Обновляет значение только если текущее равно ожидаемому. Это основа большинства Lock-Free алгоритмов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🎉1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔24🌚13🥱6😁1
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
❤1👍1👏1
Друзья, нас часто спрашивают про публикацию материалов о личном опыте и знаниях в IT. Пора это систематизировать!
Если у вас есть история о том, как вы:
• выросли в профессии
• освоили новые технологии
• сделали крутой карьерный скачок
• эпично лажанулись
• создали интересные проекты
— присылайте свои статьи на почту [email protected] с темой DevLife
Требования простые:
• Реальный опыт
• Конкретные шаги
• От 5000 знаков
• Ссылка на Google Docs
Лучшие истории опубликуем на сайте и в наших соцсетях с общим охватом 1 млн + человек.
Please open Telegram to view this post
VIEW IN TELEGRAM
Go 1.23.5 стала доступна для разработчиков. Это обновление является частью регулярного цикла исправлений и включает в себя исправления ошибок, затрагивающих ключевые области языка и стандартной библиотеки.
Основные изменения в Go 1.23.5:
🖇 Список исправлений
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3👏1
Краткий видеообзор Go 1.24
Если чтение длинных списков изменений и технических деталей - не ваш метод, предлагаю посмотреть наглядное видео с обзором ключевых нововведений в грядущей версии Go 1.24.
👀 Смотреть видео
🐸 Библиотека Go разработчика
Если чтение длинных списков изменений и технических деталей - не ваш метод, предлагаю посмотреть наглядное видео с обзором ключевых нововведений в грядущей версии Go 1.24.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14❤1
🚀 go.nvim — плагин для разработки на Go в Neovim
Для разработчиков на Go, использующих Neovim, плагин go.nvim стал незаменимым инструментом, превращающим редактор в полноценную IDE. Этот плагин объединяет все необходимые функции для комфортной разработки: от базовой подсветки синтаксиса до продвинутых возможностей отладки. Давайте разберём основные возможности go.nvim и посмотрим, как он может улучшить ваш процесс разработки.
🔧 Что умеет go.nvim?
Подсветка синтаксиса и работа с текстом:
➡️ Интеграция с Treesitter для точной и быстрой подсветки синтаксиса.
➡️ Улучшенные текстовые объекты для Go-кода.
Асинхронность:
➡️ Все операции выполняются без блокировки интерфейса благодаря использованию асинхронных функций через libuv.
Поддержка всех возможностей LSP, включая:
➡️ Переход к определению.
➡️ Просмотр референсов.
➡️ Организация импортов.
➡️ Автозаполнение.
Поддержка Go-инструментов:
➡️ Автоматическое выполнение таких команд, как go mod tidy, fillstruct, impl и многих других.
➡️ Генерация и организация кода в один клик.
Отладка (Debugging):
➡️ Интеграция с DAP для отладки Go-приложений прямо из Neovim.
➡️ Настраиваемые файлы конфигурации, такие как launch.json.
Гибкая настройка:
➡️ Поддержка настройки на уровне проектов для индивидуального поведения плагина.
📎 Полное руководство по установке и настройке плагина
🐸 Библиотека Go разработчика
Для разработчиков на Go, использующих Neovim, плагин go.nvim стал незаменимым инструментом, превращающим редактор в полноценную IDE. Этот плагин объединяет все необходимые функции для комфортной разработки: от базовой подсветки синтаксиса до продвинутых возможностей отладки. Давайте разберём основные возможности go.nvim и посмотрим, как он может улучшить ваш процесс разработки.
🔧 Что умеет go.nvim?
Подсветка синтаксиса и работа с текстом:
Асинхронность:
Поддержка всех возможностей LSP, включая:
Поддержка Go-инструментов:
Отладка (Debugging):
Гибкая настройка:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👏1
Один энтузиаст решил превратить PlayStation 1 в устройство с поддержкой онлайн-игр, используя Raspberry Pi и Golang. Его проект объединяет технологии прошлого и настоящего: данные с PS1 передаются через последовательный порт (serial) на Raspberry Pi, где они конвертируются в WebSockets.
Как это работает:
🖇 Посмотреть как это реализовано
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤3
Watermill: фреймворк для обработки событий в Go
Watermill — это фреймворк на Go, предназначенный для создания систем, основанных на обработке событий. Его основная задача — упрощение работы с потоками сообщений, а также интеграция различных сервисов через брокеры сообщений.
Возможности и особенности:
➕ Поддержка брокеров сообщений: Kafka, RabbitMQ, NATS, Google Pub/Sub, а также встроенные очереди.
➕ Маршрутизация сообщений: позволяет настроить обработку событий в зависимости от их типа, темы и других параметров.
➕ Гибкость: можно адаптировать фреймворк под разные сценарии использования, от небольших микросервисов до распределенных систем.
➕ Инструменты мониторинга: встроенные логирование и трейсинг помогают отслеживать состояние системы и выявлять проблемы.
Пример использования:
Допустим, нужно настроить обработку заказов в системе электронной коммерции. Заказы отправляются в Kafka, откуда Watermill получает сообщения, преобразует их и передает в очереди RabbitMQ для дальнейшей обработки.
🧑💻Как это выглядит в коде:
❓Где применить:
Watermill подходит для сценариев, где требуется асинхронная обработка данных, масштабируемость и гибкость. Это может быть полезно в системах аналитики, IoT-платформах или при построении микросервисной архитектуры.
🐸 Библиотека Go разработчика
Watermill — это фреймворк на Go, предназначенный для создания систем, основанных на обработке событий. Его основная задача — упрощение работы с потоками сообщений, а также интеграция различных сервисов через брокеры сообщений.
Возможности и особенности:
Пример использования:
Допустим, нужно настроить обработку заказов в системе электронной коммерции. Заказы отправляются в Kafka, откуда Watermill получает сообщения, преобразует их и передает в очереди RabbitMQ для дальнейшей обработки.
🧑💻Как это выглядит в коде:
r := router.NewRouter(router.Config{}, logger)
r.AddHandler(
"order_handler",
"orders",
kafkaSubscriber,
"processed_orders",
rabbitPublisher,
func(msg *message.Message) ([]*message.Message, error) {
// Логика обработки сообщения
return []*message.Message{msg}, nil
},
)
r.Run()
❓Где применить:
Watermill подходит для сценариев, где требуется асинхронная обработка данных, масштабируемость и гибкость. Это может быть полезно в системах аналитики, IoT-платформах или при построении микросервисной архитектуры.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤2
💡 SQL-транзакции в Go: чисто и эффективно
Работа с транзакциями в Go может быть запутанной: *sql.Tx проникает в бизнес-логику, тестировать сложно, а код теряет чистоту. Наш коллега Go-разработчик предлагает элегантное решение — интерфейс Transactor, который изолирует работу с транзакциями от бизнес-логики.
❓В чём суть
Транзакции обрабатываются через интерфейс:
Ваша логика не знает, используется ли транзакция или нет — всё это абстрагировано в Transactor.
📎 Подробнее про решение в статье
🐸 Библиотека Go разработчика
Работа с транзакциями в Go может быть запутанной: *sql.Tx проникает в бизнес-логику, тестировать сложно, а код теряет чистоту. Наш коллега Go-разработчик предлагает элегантное решение — интерфейс Transactor, который изолирует работу с транзакциями от бизнес-логики.
❓В чём суть
Транзакции обрабатываются через интерфейс:
type Transactor interface {
WithinTransaction(ctx context.Context, func(ctx context.Context) error) error
}
Ваша логика не знает, используется ли транзакция или нет — всё это абстрагировано в Transactor.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱16👍8❤1👏1
🎧 Новый выпуск подкаста о Go
В последнем эпизоде подкаста Cup o' Go ведущие обсуждают актуальные события в мире Go.
Основные темы выпуска:
➡️ Выпуск Go версий 1.23.5 и 1.22.11, включающих исправления приватных CVE. Рекомендуется обновиться для поддержания безопасности приложений.
➡️ Обсуждение недавно обнаруженной уязвимости в библиотеке gRPC и её влияние на экосистему Go.
➡️ Представление интерактивного тура по Go 1.24, позволяющего разработчикам ознакомиться с новыми функциями и улучшениями языка.
➡️ Рассмотрение новых возможностей в статическом генераторе сайтов Hugo, полезных для разработчиков, использующих его в своих проектах.
➡️ Обсуждение недавних изменений в грамматике Go, направленных на улучшение читаемости и консистентности кода.
🖇 Слушать обсуждение новостей
🐸 Библиотека Go разработчика
В последнем эпизоде подкаста Cup o' Go ведущие обсуждают актуальные события в мире Go.
Основные темы выпуска:
🖇 Слушать обсуждение новостей
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👾4