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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
⚙️ Мелодия Go или библиотека для веба

Melody — это простая и мощная библиотека для работы с WebSocket в Go, которая позволяет создавать серверы для обмена данными в реальном времени. С её помощью можно легко организовать двустороннюю связь между сервером и клиентами, что идеально подходит для приложений, где важна моментальная реакция, например, чатов, уведомлений или онлайн-игр.

Основные особенности Melody:
Простота в использовании: Melody предлагает понятный API для работы с WebSocket, минимизируя код и упрощая интеграцию.
Масштабируемость: Поддерживает одновременные подключения множества клиентов, что делает её отличным выбором для высоконагруженных приложений.
Группировка подключений: Возможность организовывать WebSocket-сессии в каналы, отправляя сообщения нескольким клиентам одновременно.
Сохранение состояния: Поддерживает управление состоянием подключений, что помогает отслеживать активные сессии.
👍19❤‍🔥1🤔1
🔍 Утечки памяти в Go: как их обнаружить и устранить?

Утечки памяти в Go — не редкость, но часто они происходят не из-за ошибок управления памятью, а из-за того, что ненужные объекты остаются достижимыми. Как диагностировать и исправлять такие ситуации?

Простая диагностика:
🛠️ Используйте встроенный пакет pprof для профилирования памяти.
🛠️ Анализируйте дампы памяти, чтобы определить объекты, которые потребляют больше всего ресурсов.
🛠️ Принудительно запускайте сборщик мусора (runtime.GC()), чтобы проверить, уменьшается ли объём используемой памяти.

Часто виновниками оказываются сторонние библиотеки. Например, одна из них оставляла ссылки на объекты после обработки данных, что приводило к значительному росту потребления памяти.

Инструменты:
🔧 pprof: помогает найти «горячие точки» кода.
🔧 Дампы памяти: показывают, какие объекты занимают больше всего места.
🔧 Тестирование: заменяйте проблемные фрагменты и проверяйте, решена ли проблема.
👍20
📂 Работа с файлами в Go: просто и эффективно с помощью срезов

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

💡 Основные методы работы с файлами:
ReadAllLines — читает содержимое файла и возвращает его в виде среза строк.
WriteAllLines — записывает срез строк в файл, перезаписывая его содержимое.
AppendAllLines — добавляет срез строк в конец существующего файла.

📚 Когда это полезно?
Построчной обработки текстовых данных.
Работы с исходным кодом или шаблонами, где нужно игнорировать комментарии или анализировать строки по отдельности.
Простого и понятного управления содержимым файлов.

🔧 Пример использования: Читаете файл как массив строк, обрабатываете строки в коде, затем записываете результат обратно. Всё легко, понятно и без лишних циклов.

📎 Подробнее в статье
👍132😁1😢1
📈 Кадровый голод в IT: почему компании готовы платить на 13% больше

Несмотря на экономическую нестабильность и сокращения в некоторых секторах, компании готовы платить рекордные зарплаты, чтобы привлечь и удержать талантливых специалистов. В статье, по ссылке ниже, мы разбираемся, почему в IT наблюдается дефицит кадров, какие навыки сейчас востребованы, и как работодатели борются за внимание лучших профессионалов, предлагая условия, о которых еще недавно можно было только мечтать.

Если вам интересно, как кадровый рынок в IT адаптируется к новым вызовам, и что это значит для вас как для разработчика или работодателя, читайте дальше!

📎 Читать статью
👍5
🛑 Плохие способы создания пайплайнов в Go

В статье на Poxate разобраны самые распространённые, но крайне неэффективные способы создания пайплайнов в Go.

Если вы пишете пайплайны в Go, обратите внимание на эти ошибки:
Горутины без контроля — создание пайплайнов с множеством горутин без управления их количеством может привести к перегрузке системы и сложностям с отладкой.
Игнорирование ошибок — ошибки должны обрабатываться на каждом этапе пайплайна. Иначе — непредсказуемые сбои и нестабильная работа.
Глобальные состояния — использование глобальных переменных затрудняет тестирование и поддержку кода.
Отсутствие тестов — без тестов не удастся выявить проблемы на ранней стадии.
Неправильное использование каналов. Каналы — мощный инструмент, но неправильное их использование может привести к утечкам данных и багам.

Не повторяйте этих ошибок! Разработайте пайплайны с учётом лучших практик и избегайте ненужных проблем в будущем.

📎 Подробнее в статье
👍9🥱72👾2🥰1
⚙️ Подпишись на нашу еженедельную email-рассылку, чтобы быть в курсе последних открытий и тенденций в мире бэкенда.

В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования

👉Подписаться👈
👍1🔥1
📚 Управление конфигурациями в Go с помощью Viper

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

В недавней статье на Dev.to обсуждается, как эффективно использовать Viper для работы с конфигурациями. Вот несколько ключевых моментов:
Много источников данных: viper позволяет загружать настройки из файлов (JSON, TOML, YAML и других), переменных окружения и флагов командной строки.
Удобство и гибкость: легко управлять конфигурациями, которые могут изменяться в зависимости от окружения или уровня сложности.
Динамическое обновление: поддержка работы с динамическими конфигурациями для улучшения гибкости приложений.

📎 Подробнее читайте в источнике
👍4🔥1
🎯 Минорная версия Go 1.23.4

Как и положено минорному обновлению, Go 1.23.4 содержит ряд исправлений и улучшений, которые повышают стабильность и корректность работы на различных платформах:

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

🛠 Исправления в сетевых функциях: добавлены исправления для MPTCP, улучшена работа с сетевыми сокетами, что влияет на многопутевое TCP-соединение, и устранены проблемы с реализацией ListenTCP() и DialTCP().

🛠 Поддержка специфичных для платформы ошибок: были исправлены ошибки в тестах, которые возникали на определенных платформах, таких как Windows-386, и исправлены проблемы с некорректным выполнением системных вызовов, связанных с вариативными аргументами.

🛠 Исправления в компиляторе и сборщике мусора: были устранены ошибки в коде компилятора и улучшено его поведение в рамках функциональных итераторов.

📎 Подробнее можно изучить в официальном репозитории
🔥12👍7🥰4
Привет, Go-разработчики! 🌱

2024-й был насыщенным годом, и мы собираем мнения о самых значимых изменениях и достижениях. Какие технологии или фреймворки стали настоящим прорывом? Какие навыки оказались самыми важными для вас в этом году? А какие тренды в разработке будут определять 2025-й?

Поделитесь своими мыслями с нами! Мы готовим статью об IT-итогах 2024 году и хотим услышать ваше мнение! 💻 Поделитесь своим мнением, и самое важное и интересное войдет в нашу статью. 🏆
👏3👍1
Проблемы большого количества горутин в Go

Когда количество горутин в Go не контролируется, могут возникнуть следующие проблемы:
🛑 Перегрузка ресурсов: каждая горутина требует памяти и процессорного времени, что при избыточном их числе может привести к утечке памяти и падению приложения.
🛑 Проблемы с планировщиком Go: слишком много горутин может затруднить эффективное распределение задач между потоками, снижая производительность.
🛑 Заблокированные горутины: без контроля задачи могут не успевать выполняться из-за заблокированных горутин, ожидающих ресурсы.
🛑 Невозможность масштабирования: неконтролируемое количество горутин усложняет масштабирование приложения и может привести к застою и замедлению работы.
🛑 Проблемы с синхронизацией и состоянием гонки: большое количество горутин увеличивает вероятность ошибок синхронизации и состояния гонки, когда несколько горутин пытаются одновременно обращаться к одним и тем же данным.


Что с этим делать?
🛠 Ограничение количества горутин: используйте каналы или семафоры для ограничения числа одновременно выполняющихся горутин, например, с помощью буферизированных каналов.
🛠 Использование очередей задач: разделите задачи на более мелкие, чтобы избежать перегрузки.
🛠Тестирование и мониторинг: регулярно тестируйте приложение и следите за его производительностью, чтобы вовремя заметить проблемы.

🖇 Если вам интересно, как это реализовать, читайте статью
👍172🤔1
💻 Надёжное выполнение SQL-транзакций в Go

Хотите упростить управление SQL-транзакциями в Go? В статье рассказывается, как создать обобщённый фреймворк, минимизировать boilerplate-код и повысить читаемость. Вы узнаете:
Как автоматизировать начало, фиксацию и откат транзакций.
Как обрабатывать ошибки без излишней сложности.
Подходы, которые улучшают масштабируемость и надёжность кода.

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

📖 Подробнее в статье
👍6🥱5👾1
🔍 Сравнение фреймворков Go: что выбрать для высокой производительности?

Тестирование стандартной библиотеки Go, fasthttp, Fiber и gNet по метрикам задержки, пропускной способности, использования CPU и памяти, а также работы с PostgreSQL. Результаты показали, что стандартная библиотека дает наименьшую задержку, но имеет высокий расход CPU. fasthttp и Fiber демонстрируют схожие результаты, а gNet — потенциал для более высокой пропускной способности, несмотря на ограничения с подключениями.

📊 Полные результаты тестов и подробности в видео!
👏71🔥1
🎯 aligo: Утилита для проверки структур в Go

Aligo — инструмент для анализа и проверки структур в языке Go. Помогает оптимизировать память, выявляя неэффективные структуры данных.

Основные возможности:
Проверка структур
Совместимость с GitHub Actions
Поддержка командной строки
Генерация man-документов
Возможность игнорирования структур

Установка:
go install github.com/essentialkaos/aligo/v2@latest


Пример использования:
sudo aligo --completion=bash 1> /etc/bash_completion.d/aligo


📎 Официальный репозиторий
👍26🥱104🔥2
🧊 Тайны Go: Почему объединенные типы — головная боль разработчиков

Представьте, что вы пытаетесь запихнуть слона в спичечный коробок — примерно так выглядит попытка создать объединенные типы в Go! В недавней статье программист раскрыл интригующие технические секреты, которые делают эту задачу настоящим программистским квестом.

🛠 Ключевая интрига: память как многослойный пирог.
Go — язык с невероятно продуманной системой управления памятью. Механизм сборки мусора настолько точен, что может различать малейшие нюансы хранения данных. Когда разработчики хотят создать универсальный тип (вроде того же Result из Rust), они натыкаются на настоящую стену непонимания между компилятором и разработчиком.

🎈 Технический цирк: указатели играют в прятки.
Представьте: компилятор должен угадать, что лежит в памяти — два указателя или два целых числа? Это как детектив, пытающийся решить головоломку с завязанными глазами! Язык Rust умеет буквально фокусничать с памятью, Go — пока нет.

Альтернативы: вместо создания сложных объединенных типов в Go можно использовать более простые решения: интерфейсы и обобщенные типы. Это как выбирать между швейцарским ножом и лазерным скальпелем — каждый инструмент имеет свои преимущества!

Короче говоря, создание объединенных типов в Go — это не просто техническая задача, а настоящее искусство программирования. Язык Go намеренно держит высокую планку простоты и явности, не позволяя усложнять архитектуру без крайней необходимости.

🖇 Источник
👍112👾1
👾 15 кибератак, которые потрясли мир: от $96 млн до $15 млрд ущерба

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

🔗 Читать статью
🔗 Зеркало
6👍3😁3👾2
🔥 Как предотвратить сбои в Go?

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

📌 Основные методы предотвращения сбоев

1️⃣ Использование линтера golangci-lint
Этот инструмент помогает выявлять ошибки, потенциальные утечки памяти и опасные конструкции в коде. Настройте его в вашем CI/CD пайплайне, чтобы всегда держать код в идеальном состоянии.

2️⃣ Проверка конкурентных ошибок с помощью -race
Многопоточность — это мощь Go, но гонки данных могут разрушить всё. Запускайте тесты с флагом -race, чтобы выявлять и устранять конкурентные проблемы на раннем этапе.

3️⃣ Сканирование уязвимостей с govulncheck
Этот инструмент анализирует ваш код и зависимости на наличие известных уязвимостей. Регулярное его использование защитит вашу программу от эксплуатации слабых мест.

📌 Работа с паниками и восстановлением
Иногда паника неизбежна. Используйте recover() внутри отложенных функций для управления критическими ошибками и предотвращения краха программы.

Пример:

func safeExecute() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Поймали панику:", r)
}
}()
panic("что-то пошло не так")
}


📌 Когда паника — это нормально?
Используйте её только для непредвиденных, критических ошибок, таких как сбой системы или нарушение инвариантов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍153👾2
🗃️ Анатомия SQL-запроса: как работают запросы к базе данных

Как разработчику эффективно работать с базами данных?
Один из ключевых навыков — понимание, как именно выполняются SQL-запросы. В этой статье разобраны все этапы работы запросов с базой данных: от парсинга до оптимизации.
Это поможет не только улучшить производительность приложений, но и избежать частых ошибок при взаимодействии с БД.

📎 Погружаемся в анатомию SQL-запросов по ссылке!
🥱8👍2
💡 Ускоряем веб-разработку: как Go и HTMX создают мощный тандем

Проект go-htmx — это библиотека для упрощения разработки веб-приложений с использованием Go и технологий от HTMX. Она предоставляет инструменты для создания интерактивных интерфейсов без сложных клиентских фреймворков. С помощью этой библиотеки можно динамически обновлять части страницы, обрабатывать шаблоны, добавлять кастомные функции в них и легко управлять состоянием компонентов.

Основные возможности:
Поддержка компонетно-ориентированного рендеринга через шаблоны Go;
Управление локальными и глобальными данными в компонентах;
Обработка шаблонов с кешированием для повышения производительности;
Интеграция с контекстами Go для безопасной работы с вложенными компонентами.

Проект ориентирован на разработчиков, которые хотят минимизировать JavaScript-код, используя возможности HTMX для обновления DOM через HTTP-запросы.

📎 Более подробное описание есть в репозитории проекта
😁19🔥43👍1
Тест: 🐍 Насколько ты продвинутый питонист?

Python — отличный язык для автоматизации и решения задач, с которыми сталкивается каждый разработчик.
Пройдите тест и узнайте, насколько вы продвинуты в Python. Эти навыки будут полезны для оптимизации процессов и улучшения ваших проектов!

🎯 Пройти тест
🥱13😁2👏1😢1👾1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🐛🔍 Как найти баг в 2088 коммитах с помощью git bisect

Метод git bisect — мощный инструмент для поиска изменения, вызвавшего баг в коде: с его помощью разработчику удалось быстро локализовать проблему, просмотрев всего 11 коммитов вместо изначальных 2088.

Задача: найти конкретный коммит, который вызвал регрессионную ошибку в проекте.

Исходные данные:
✔️ Ошибка была зарегистрирована 21 октября. Она находится в текущей версии на ветке main.
✔️ Ошибка отсутствует в более ранней версии, которая была выделена в отдельную ветку release-5.7.0.
✔️ Ветку release-5.7.0 создали 2 месяца назад, а с тех пор в ветке main было сделано много изменений — баг может находиться в любом из нескольких тысяч коммитов, которые невозможно быстро просмотреть.

🔗 Читать статью
🔗 Зеркало
👍11🥰3😁3🔥1
⚡️Самые полезные каналы по Go в одной папке

В ней:
канал для подготовки к собеседованиям
интересные задачи
основной канал (этот)
книги по Go
лучшие вакансии из сферы
и наш чат, в котором можно общаться и задавать вопросы

Добавляйте 👉 тык сюда
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱5😁3