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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
🆕 Больше обобщений в Go!

В версии Go 1.24, запланированной к выпуску в феврале 2025 года, будет введена полная поддержка обобщённых (generic) псевдонимов типов. Это означает, что теперь псевдонимы типов могут быть параметризованы так же, как и определённые типы, что значительно расширяет возможности для написания более гибкого и повторно используемого кода.

Что такое псевдонимы типов?
Псевдонимы типов позволяют создавать альтернативные имена для существующих типов без создания новых типов. Это полезно для улучшения читаемости кода и упрощения рефакторинга. До версии Go 1.24 псевдонимы типов не могли быть параметризованы, что ограничивало их применение в обобщённом программировании.

🆕 Нововведения в Go 1.24
С введением обобщённых псевдонимов типов в Go 1.24 разработчики могут создавать параметризованные псевдонимы, что упрощает рефакторинг и поддержку кода. Например, если у вас есть обобщённый тип в одном пакете, вы можете создать его псевдоним в другом пакете, сохраняя совместимость и улучшая структуру проекта.

Предположим, в пакете oldpkg определён обобщённый тип Pair:
package oldpkg

type Pair[T any] struct {
First T
Second T
}


В Go 1.24 вы можете создать обобщённый псевдоним этого типа в новом пакете newpkg:
package newpkg

import "path/to/oldpkg"

type Pair[T any] = oldpkg.Pair[T]


Теперь newpkg.Pair является псевдонимом для oldpkg.Pair и может использоваться аналогично, что облегчает миграцию и рефакторинг кода.

Временное отключение функции
На момент выпуска Go 1.24 поддержка обобщённых псевдонимов типов может быть отключена с помощью установки переменной окружения GOEXPERIMENT=noaliastypeparams. Однако в версии Go 1.25 эта опция будет удалена, и функция станет стандартной частью языка.
Please open Telegram to view this post
VIEW IN TELEGRAM
👋Привет, Go-сообщество!

Мы ищем участников для интервью на тему «Обучение навыкам в IT»!

Кто нам нужен?
Вы недавно (в последние 6 месяцев) проходили курсы по техническим специальностям или математике.
Вы разработчик, стремящийся освоить Data Science или Machine Learning.

Что вас ждет?
Участие в интервью по Zoom, которое займет не больше 45 минут.📞
🤑 1500 рублей на карту за ваше время.
Уникальный шанс пообщаться с нашим CEO!😎

Как откликнуться?
✏️Напишите в личные сообщения @artem_ceo
Please open Telegram to view this post
VIEW IN TELEGRAM
🌟 Привет, Go-сообщество!

Во время кодинга у каждого свой способ оставаться в потоке: кто-то слушает музыку, кто-то смотрит сериалы, а кто-то работает в полной тишине.

👇Что помогает вам? Рекомендуйте свои фавориты в комментариях!

#интерактив
Что такое стратегия «sharding» в контексте кэширования?

Sharding — это стратегия горизонтального масштабирования, которая разбивает данные на сегменты («шарды») таким образом, чтобы каждая часть хранилась отдельно и обрабатывалась независимо.

В контексте распределённого кэша, шардинг используется для разделения данных между несколькими узлами с целью:
Снижения нагрузки на отдельные узлы.
Ускорения операций записи и чтения.
Горизонтального масштабирования, позволяя добавлять новые узлы в кэш.

Как это работает?
При шардинге каждый ключ привязывается к определённому узлу на основе функции хэширования. Алгоритм хэширования принимает ключ (например, строку) и возвращает число, которое определяет, на какой узел будут записаны или считаны данные.

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🤨 Gron: две стороны одного имени

Если вы загуглили «Gron» и запутались, о чём речь, не переживайте. Под этим названием скрываются два совершенно разных, но интересных инструмента. Вот короткое знакомство с обоими.

1️⃣Gron #1: Утилита для работы с JSON
Этот 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-файлами в терминале.

2️⃣Gron #2 Библиотека для запуска cron
Второй Gron — это библиотека для написания и запуска cron job-ов в Go с минималистичным интерфейсом. Она предлагает простой и гибкий API для задания расписаний, управления задачами и настройки пользовательских типов заданий.

Основные возможности:
Планирование задач:
Простое создание периодических расписаний (Every).
Поддержка расписаний на уровне дня, недели, месяца.

Пользовательские типы задач:
Определение задач через интерфейс gron.Job.
Возможность выполнения задач асинхронно.

Гибкость расписания:
Настройка времени запуска через метод .At(hh:mm).
Возможность использовать кастомные расписания.

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос, который вы себе не задавали - «Почему перебор в map происходит случайным образом?»

Причины случайного порядка в map:
1️⃣Оптимизация производительности
Go использует хэш-таблицу для хранения данных в map. Элементы сохраняются по хэшированным ключам, и их порядок в памяти зависит от того, как хэш-функция распределяет данные. Это позволяет обеспечить:

2️⃣Быстрый доступ к данным (O(1) для чтения/записи).
Оптимальное использование памяти.
Защита от зависимости от порядка
Если бы порядок был фиксированным, программисты могли бы начать на него полагаться, что привело бы к сложным багам при изменении реализации map. Случайность в порядке обхода вынуждает писать код, который явно не зависит от этого порядка.

3️⃣Рандомизация для безопасности
Go намеренно перемешивает порядок элементов в map между запусками программы. Это делает сложнее предсказать хэш-функцию и эксплуатировать уязвимости, связанные с предсказуемым порядком.

4️⃣Простота реализации
Гарантированный порядок потребовал бы дополнительной логики в реализации map, что увеличило бы сложность кода рантайма и ухудшило производительность.

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠🐹 Что такое линтеры в Go и зачем они нужны

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

Что делает линтер?

Линтер проверяет код на:
Ошибки стиля (например, неправильные имена переменных).
Потенциальные баги (неиспользуемые переменные, забытые defer).
Неоптимальный код (лишние вычисления, неэффективные алгоритмы).
Соответствие стандартам (следование Go Code Review Comments).

Популярные линтеры для Go:

golint — проверяет стиль кода, соответствие рекомендациям Go (устарел, но до сих пор используется).

staticcheck — мощный инструмент для обнаружения багов и улучшения кода.

golangci-lint — удобный инструмент, объединяющий несколько линтеров. Поддерживает кастомизацию и интеграцию с CI.

errcheck — проверяет, обрабатываете ли вы ошибки из функций.

gosec — находит уязвимости в коде (например, небезопасные вызовы).

revive — современный, быстрый линтер, который заменяет golint.

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔖📕 Что почитать?

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

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻Почему 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
🔗Обновление 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
Структуры данных без блокировок

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
Вакансии «Библиотеки программиста» — ждем вас в команде!

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

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

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

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

Друзья, нас часто спрашивают про публикацию материалов о личном опыте и знаниях в IT. Пора это систематизировать!

Если у вас есть история о том, как вы:
• выросли в профессии
• освоили новые технологии
• сделали крутой карьерный скачок
• эпично лажанулись
• создали интересные проекты
— присылайте свои статьи на почту hello@proglib.io с темой 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
Краткий видеообзор Go 1.24

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

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

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

#мем

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 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