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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download 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
🎮 Как 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
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
💡 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
🎧 Новый выпуск подкаста о 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
🌵🕵️‍♂️ Git-квест: 10 испытаний для повелителя репозиториев

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

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

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

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

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

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

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

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

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

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

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

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

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

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

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 Обновление Revive

Revive — это быстрый и настраиваемый линтер для языка Go, предназначенный для улучшения качества кода и повышения производительности разработки. Недавно был выпущен релиз версии v1.6.0, включающий следующие изменения:

Основные изменения в версии v1.6.0:

➡️ Рефакторинг правил:

• Оптимизация правила error-return путем замены обхода AST на итерацию по декларациям.

• Улучшение правила flag-param с аналогичной заменой метода обхода.

• Модификация правила modifies-value-receiver для повышения эффективности.

➡️ Исправления:

• Корректировка регулярного выражения в правиле filename-format для правильной обработки расширения файлов .go.

• Обновление документации RULES_DESCRIPTIONS.md для улучшения описаний правил.

➡️ Новые возможности:

• Добавлено новое правило use-errors-new, рекомендующее использование errors.New для создания новых ошибок.

➡️ Прочие улучшения:

• Улучшено определение сортируемых элементов в коде.

• Добавлены недостающие тесты для правила var-declarations и исправлены проблемы с типами any/interface{}.

• Обновлен файл go.sum и выполнена очистка кода в правилах.

📎 Полный список изменений

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
Наш язык тоже не остался в стороне!

#мем

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Быстрый обзор go-app

go-app — это пакет для создания прогрессивных веб-приложений (PWA) с использованием языка программирования Go и WebAssembly.

💡Особенности go-app:

• Позволяет описывать UI-компоненты с помощью Go-кода, что упрощает разработку и поддержку приложений.

• Использует стандартную модель HTTP Go, обеспечивая совместимость и простоту интеграции.

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

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

➡️ Для начала работы с go-app необходимо установить Go версии 1.18 или новее и инициализировать модуль Go в вашем проекте. После этого можно установить пакет go-app с помощью команды:
go get -u github.com/maxence-charriere/go-app/v10/pkg/app


➡️ Hello-world пример:
type HelloWorld struct {
app.Compo
}

func (h *HelloWorld) Render() app.UI {
return app.Div().Body(
app.H1().Text("Hello, World!"),
)
}

func main() {
app.Route("/", &HelloWorld{})
app.RunWhenOnBrowser()

http.Handle("/", &app.Handler{
Name: "Hello World App",
Description: "Простое приложение на go-app",
})
http.ListenAndServe(":8080", nil)
}


📎Подробную информацию и документацию можно найти на странице проекта

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
❗️Осторожно: работа с append в Go

Если вы пишете на Go, вы наверняка используете слайсы и функцию append. Но знаете ли вы, что append может привести к неожиданным багам, если не понимать, как она работает? Давайте разберем, как избежать подводных камней.

Как работает append?

Функция append добавляет элементы в срез и возвращает новый срез. Однако есть нюанс: если емкость исходного среза достаточна, append изменит его. Если нет — создаст новый срез с новым базовым массивом.
go slice := []int{1, 2, 3}
newSlice := append(slice, 4)
slice[0] = 99
fmt.Println(newSlice)


Возможные проблемы:

➡️ Если несколько срезов ссылаются на один базовый массив, изменение одного среза может повлиять на другие;

➡️ Если вы сохраняете ссылку на большой массив через под-срез, это может предотвратить сборку мусора для неиспользуемых данных;

➡️ Если вы предполагаете, что append всегда создает новый срез, это может привести к неожиданному поведению.

Как избежать проблем?

1️⃣ Создавайте копии срезов
Если вам нужно изменить срез, не затрагивая исходный, используйте функцию copy или явно создавайте новый срез.
go original := []int{1, 2, 3}
copied := make([]int, len(original))
copy(copied, original)
copied[0] = 99
fmt.Println(original)
fmt.Println(copied)


2️⃣ Используйте полное выражение среза
Если вы создаете под-срез и хотите контролировать его емкость, используйте полное выражение среза (slice[low:high:max]).
go original := []int{1, 2, 3, 4, 5}
subslice := original[1:4:4]
subslice = append(subslice, 6)
fmt.Println(original)
fmt.Println(subslice)


3️⃣ Проверяйте емкость перед использованием append
Если вы хотите быть уверены, что append не изменит исходный срез, проверьте его емкость.
go slice := []int{1, 2, 3}
if cap(slice) == len(slice) {
newSlice := append(slice, 4)
fmt.Println(newSlice)
} else {
newSlice := append(slice, 4)
fmt.Println(newSlice)
}


🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Упрощаем работу с флагами в Go: flagforge

Разработка CLI-приложений на Go часто требует работы с флагами командной строки. Стандартный пакет flag удобен, но когда флагов много, их ручное определение становится утомительным. В этом помогает flagforge — инструмент для автоматизации создания флагов.

Что такое flagforge?

Flagforge — библиотека, разработанная в рамках проекта rqlite. Она генерирует флаги на основе структуры, упрощая их управление и делая код чище.

🛠 Как это работает

1️⃣Установка:
go get github.com/rqlite/flagforge


2️⃣Определение структуры:
type Config struct {
Host string `flag:"host" desc:"Server host"`
Port int `flag:"port" desc:"Server port"`
Debug bool `flag:"debug" desc:"Enable debug mode"`
}


3️⃣Генерация флагов:
func main() {
var cfg Config
flagforge.Parse(&cfg)
flag.Parse()
fmt.Printf("Config: %+v\n", cfg)
}


4️⃣Запуск:
go run main.go -host localhost -port 8080 -debug


5️⃣Вывод:
Config: {Host:localhost Port:8080 Debug:true}


🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 📈 Data Science в 2025 году: 7 главных трендов

Разработчики JetBrains и Python Software Foundation рассказали, как изменится Data Science в ближайшие годы.

➡️ В статье:

▪️ Почему доля Python в анализе данных снижается
▪️ Какие библиотеки набирают популярность вместо pandas
▪️ Что происходит с AutoML, MLOps и визуализацией данных
▪️ И почему Rust и Julia наступают Python на пятки

Подробный разбор, новые инструменты и прогнозы на будущее — всё это читай в нашей статье.

🔵 Тренды меняются, но основы остаются — укрепи базу с нашим курсом «Математика для Data Science»
Please open Telegram to view this post
VIEW IN TELEGRAM
😊 Привет, Go-разработчики!

Мы собираем данные о том, какие методы биохакинга действительно помогают разрабам улучшить качество жизни и повысить продуктивность. Поделитесь своим опытом — это поможет другим сделать осознанный выбор в мире биохакинга.

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