Библиотека Go-разработчика | Golang
23.3K subscribers
2.07K photos
42 videos
87 files
4.45K links
Все самое полезное для Go-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/32d20779

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
🔖📕 Что почитать?

Нашли для вас парочку новинок компьютерной литературы!

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5
👨‍💻Почему Go-разработчикам полезны тренировки на LeetCode (и почему нет)

Если вы пишете на Go, скорее всего, вы знакомы с его минималистичным, но мощным подходом. Goroutines, каналы, лаконичный синтаксис – это то, что делает язык незаменимым для высоконагруженных систем и микросервисов. Но вот вы заходите на LeetCode и сталкиваетесь с задачей: «Найти k-й по величине элемент в массиве».
Давайте разберемся, так ли нужна вам такая головоломка.

Почему стоит попробовать?

Взгляд под капот Go
Go абстрагирует многие низкоуровневые детали, но это не значит, что они не важны. Решение задач заставляет углубляться в такие детали. Вы не просто пишете код – вы понимаете, что стоит за ним.

Укрощение конкуренции
В реальных задачах вы часто сталкиваетесь с багами из-за некорректной работы с горутинами. Задачи, связанные с многопоточностью, дают шанс разобраться, как правильно использовать каналы и синхронизацию данных.

Подготовка к собеседованиям
На собеседованиях вас почти наверняка попросят решить пару задач на алгоритмы. LeetCode – отличный тренажер, чтобы не ударить в грязь лицом.

🤨 Но что может пойти не так?

Go – это не академия алгоритмов
Если вы работаете над реальным продуктом, вам не нужно каждый день искать минимальное остовное дерево или реализовывать сложные структуры данных. Вместо того чтобы писать свой бинарный поиск, вы просто используете sort.Search.

Реальная разработка – это не про задачи
Go-разработчику лучше сосредоточиться на проектировании микросервисов, оптимизации REST API или настройке CI/CD. Это то, что реально поможет вам стать ценным сотрудником.

Потенциальная ловушка перфекционизма
Вы пытаетесь улучшить время работы своей программы, хотя это не имеет значения в реальных условиях. В реальных проектах важнее качество кода и его читабельность, а не сокращение выполнения алгоритма с O(n²) до O(n log n).

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
💯24👍9👏6🌚3😢1
🔗Обновление IDE для Go от JetBrains

Компания JetBrains объявила о запуске программы раннего доступа (EAP) для GoLand. В этом выпуске основное внимание уделяется следующим улучшениям:

➡️Улучшенная поддержка языка Go: включает полную поддержку Go 1.24, а также улучшенные инструменты анализа кода и статического анализа.

➡️Повышение стабильности IDE: обеспечение более плавной работы за счет решения ключевых вопросов производительности, надежности и точности.

➡️Улучшения интерфейса и пользовательского опыта: введение различных улучшений UI/UX для повышения удобства использования.

Первую сборку EAP можно загрузить через Toolbox App, с официального сайта или в виде snap-пакета для Ubuntu. Также доступно обновление из самой GoLand через настройки обновлений.

💲Программа EAP предоставляет бесплатный доступ к сборкам на 30 дней с даты выпуска и продлится до начала марта 2025 года.

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12👍53🥱3
Структуры данных без блокировок

Lock-Free структуры данных — это конструкции, обеспечивающие многопоточный доступ к данным без использования блокировок (мьютексов). Вместо этого они используют атомарные операции, такие как Compare-And-Swap (CAS). Это позволяет минимизировать задержки, устранить deadlock и повысить производительность в конкурентной среде.

Зачем они нужны?
➡️Высокая производительность: нет затрат на ожидание блокировок.
➡️Отсутствие deadlock: исключение взаимоблокировок.
➡️Скалируемость: отлично работают при высокой конкуренции потоков.

Основные инструменты в Go
Пакет sync/atomic:
Атомарные операции для целых чисел, указателей и других типов.
Пример:
atomic.AddInt32(&counter, 1)
// Увеличение
atomic.CompareAndSwapInt32(&counter, old, new)
// Сравнить и заменить


CAS (Compare-And-Swap):
Обновляет значение только если текущее равно ожидаемому. Это основа большинства Lock-Free алгоритмов.

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🎉1
Вакансии «Библиотеки программиста» — ждем вас в команде!

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

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
1👍1👏1
😉 Открытая редакция: ищем авторов для рубрики DevLife

Друзья, нас часто спрашивают про публикацию материалов о личном опыте и знаниях в 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 стала доступна для разработчиков. Это обновление является частью регулярного цикла исправлений и включает в себя исправления ошибок, затрагивающих ключевые области языка и стандартной библиотеки.

Основные изменения в Go 1.23.5:
Исправление ошибки в cmd/compile: устранена проблема, из-за которой компилятор неправильно обрабатывал определённые выражения.

Обновление в модуле net/http: исправлена ошибка, связанная с некорректной обработкой некоторых ответов сервера HTTP-клиентом.

Оптимизация в runtime: улучшена работа сборщика мусора, что положительно влияет на производительность приложений, особенно тех, которые активно используют многопоточность.

🖇 Список исправлений

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3👏1
Краткий видеообзор Go 1.24

Если чтение длинных списков изменений и технических деталей - не ваш метод, предлагаю посмотреть наглядное видео с обзором ключевых нововведений в грядущей версии Go 1.24.

👀 Смотреть видео

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Go-шники, с началом рабочей недели! Всех остальных с понедельником!

#мем

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
😁141
🚀 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 разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👏1
🎮 Как PS1 стал онлайн: инженерная магия с помощью Golang и WebSockets

Один энтузиаст решил превратить PlayStation 1 в устройство с поддержкой онлайн-игр, используя Raspberry Pi и Golang. Его проект объединяет технологии прошлого и настоящего: данные с PS1 передаются через последовательный порт (serial) на Raspberry Pi, где они конвертируются в WebSockets.

Как это работает:
PS1 подключается к Raspberry Pi через последовательный порт с помощью пайки TX, RX и GND выводов.

Raspberry Pi конвертирует данные из serial в WebSockets с помощью приложения, написанного на Golang.

Raspberry Pi подключается по Ethernet к серверу, который обрабатывает данные от PS1 и других устройств, включая PS4.

Данные от PS1 обрабатываются сервером, позволяя играть в сетевые игры между PS1 и современными устройствами.

🖇 Посмотреть как это реализовано

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍163
Watermill: фреймворк для обработки событий в Go

Watermill — это фреймворк на Go, предназначенный для создания систем, основанных на обработке событий. Его основная задача — упрощение работы с потоками сообщений, а также интеграция различных сервисов через брокеры сообщений.

Возможности и особенности:
Поддержка брокеров сообщений: Kafka, RabbitMQ, NATS, Google Pub/Sub, а также встроенные очереди.
Маршрутизация сообщений: позволяет настроить обработку событий в зависимости от их типа, темы и других параметров.
Гибкость: можно адаптировать фреймворк под разные сценарии использования, от небольших микросервисов до распределенных систем.
Инструменты мониторинга: встроенные логирование и трейсинг помогают отслеживать состояние системы и выявлять проблемы.

Пример использования:
Допустим, нужно настроить обработку заказов в системе электронной коммерции. Заказы отправляются в 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-платформах или при построении микросервисной архитектуры.

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍182
💡 SQL-транзакции в Go: чисто и эффективно

Работа с транзакциями в Go может быть запутанной: *sql.Tx проникает в бизнес-логику, тестировать сложно, а код теряет чистоту. Наш коллега Go-разработчик предлагает элегантное решение — интерфейс Transactor, который изолирует работу с транзакциями от бизнес-логики.

В чём суть
Транзакции обрабатываются через интерфейс:
type Transactor interface {
WithinTransaction(ctx context.Context, func(ctx context.Context) error) error
}

Ваша логика не знает, используется ли транзакция или нет — всё это абстрагировано в Transactor.

📎 Подробнее про решение в статье

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱16👍81👏1
🎧 Новый выпуск подкаста о Go

В последнем эпизоде подкаста Cup o' Go ведущие обсуждают актуальные события в мире Go.

Основные темы выпуска:

➡️ Выпуск Go версий 1.23.5 и 1.22.11, включающих исправления приватных CVE. Рекомендуется обновиться для поддержания безопасности приложений.

➡️ Обсуждение недавно обнаруженной уязвимости в библиотеке gRPC и её влияние на экосистему Go.

➡️ Представление интерактивного тура по Go 1.24, позволяющего разработчикам ознакомиться с новыми функциями и улучшениями языка.

➡️Рассмотрение новых возможностей в статическом генераторе сайтов Hugo, полезных для разработчиков, использующих его в своих проектах.

➡️ Обсуждение недавних изменений в грамматике Go, направленных на улучшение читаемости и консистентности кода.

🖇 Слушать обсуждение новостей

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👾4
🌵🕵️‍♂️ Git-квест: 10 испытаний для повелителя репозиториев

Привет go-сообщество! Все мы знаем, что с Go разрабатываются быстрые и эффективные программы, а Git помогает управлять всем этим хаосом. Этот тест проверит, насколько ты крут в Git, как и в своем любимом языке!

✏️ Пройти тест

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
😁222👍2❤‍🔥1🌚1
🎯 Elasticsearch: Быстрый поиск и аналитика данных

Хотите узнать, как эффективно искать и анализировать данные? Тогда вам точно стоит обратить внимание на Elasticsearch!

🔎 Что такое Elasticsearch?
Elasticsearch — это распределённый поисковый движок с открытым исходным кодом, который позволяет быстро индексировать, искать и анализировать большие объемы данных в реальном времени. Он используется для поиска по текстам, журналам событий, аналитики, мониторинга и многого другого.

🚀 Ключевые возможности Elasticsearch

➡️ Наращивает мощности по мере роста данных.

➡️ Поддержка сложных запросов и фильтров для различных типов данных.

➡️ Мощные функции поиска по текстам с учётом морфологии, синонимов и стоп-слов.

💡 Почему стоит использовать Elasticsearch?

• Подходит для работы с большими объёмами данных.

• Настройка индексов, шардов и реплик для оптимальной производительности.

• Поддержка множества инструментов и клиентов для интеграции с различными языками программирования.

🗄 Структура данных в Elasticsearch
Данные в Elasticsearch организованы в виде индексов, документов и полей. Каждый документ хранится в JSON формате, что делает его удобным для поиска и анализа.

Индекс - это коллекция документов, имеющих схожие характеристики. Например, индекс для логов приложения может называться app-logs.

Документ - это основная единица хранения данных в Elasticsearch. Каждый документ представляет собой JSON-объект, содержащий набор полей и их значений. Например, документ логов может выглядеть так:
{
"timestamp": "2025-01-23T16:55:00",
"level": "INFO",
"message": "Application started"
}


Поле - это ключ-значение пара внутри документа. Поля могут быть различных типов: строки, числа, даты и т.д.

📚 Где найти больше информации?
Документация
GitHub

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🌚4
👨‍💻 Сделаем свой веб-краулер на Go

Веб-краулер — это программа, которая автоматически обходит веб-страницы, собирает информацию и анализирует её. Обычно краулеры используются для индексации веб-страниц поисковыми системами (например, Googlebot для Google) или для автоматического сбора данных, таких как цены, рейтинги или текст.

Этапы работы веб-краулера:

1️⃣Начало с заданного URL (или списка URL).

2️⃣Сканирование содержимого страницы (HTML-код, изображения и т.д.).

3️⃣Извлечение ссылок на другие страницы.

4️⃣Переход по этим ссылкам для повторения процесса.

5️⃣Сохранение собранных данных для анализа или использования.

Пример: веб-краулер может пройтись по страницам интернет-магазина и собрать информацию о товарах: цены, отзывы, наличие и описание.

💻 Пример реализации веб-краулера

Если хочется посмотреть пошаговую реализацию, то советуем посмотреть статью. В ней описано как реализовать веб-краулер, чтобы мониторить цены на телефоны. Верим, что фантазия на этом не остановится и вы реализуете самые полезные краулеры!

📎 Посмотреть реализацию

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥95