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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
🦫 Самоучитель по Go для начинающих. Часть 17. Основы сетевого программирования. Стек TCP/IP. Сокеты. Пакет net

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

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

👉 Читать гайд

👩‍💻 Остальные части в серии:

1. Особенности и сфера применения Go, установка, настройка
2. Ресурсы для изучения Go с нуля
3. Организация кода. Пакеты, импорты, модули. Ввод-вывод текста.
4. Переменные. Типы данных и их преобразования. Основные операторы
5. Условные конструкции if-else и switch-case. Цикл for. Вложенные и бесконечные циклы
6. Функции и аргументы. Области видимости. Рекурсия. Defer
7. Массивы и слайсы. Append и сopy. Пакет slices
8. Строки, руны, байты. Пакет strings. Хеш-таблица (map)
9. Структуры и методы. Интерфейсы. Указатели. Основы ООП
10. Введение в ООП. Наследование, абстракция, полиморфизм, инкапсуляция
11. Обработка ошибок. Паника. Восстановление. Логирование
12. Обобщенное программирование. Дженерики
13. Работа с датой и временем. Пакет time
14. Интерфейсы ввода-вывода. Буферизация. Работа с файлами. Пакеты io, bufio, os
15. Конкурентность. Горутины. Каналы
16. Тестирование кода и его виды. Table-driven подход. Параллельные тесты
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍7
📄 Компиляция Go-программы в нативный бинарь для Nintendo Switch

Вовсе не новость, но кто-то мог пропустить это в своё время. Интересно взглянуть на детали👇

🔗 Читать гайд
👍13🤩3🔥2🎉1
👨‍💻🚀 Тест: насколько ты продвинутый разраб?

Говорят, что джун становится мидлом, когда начинает понимать, как мало он знает. Этот тест покажет, насколько ты продвинулся в своём развитии.

👉 Ворваться
👍3👾3😁2
🎧 В последнем выпуске подкаста Go Time Wesley Beary из Anchor рассказал о трудностях, с которыми столкнулась его команда при создании CLI-инструмента на Go

Учитывая количество библиотек, доступных Go-разработчикам в наши дни, можно подумать, что создание CLI-приложения стало тривиальным делом. Но все не так однозначно.

Так какие трудности могли возникнуть у команды на пути к production-ready CLI? 🤔

👉 Слушать (по ссылке также можно прочитать транскрибацию)
🥱5👍4🔥2🤔1
🚀 Проект nxdir-s/pipelines: элегантная работа с потоками данных в Go

Если вы сталкиваетесь с задачами конкурентной обработки данных в Go, эта библиотека существенно облегчит создание и управление потоками данных (pipelines), обеспечивая удобную поддержку параллелизма.

Ключевые возможности:
🔄 Создание потоков данных: легко генерируйте данные из срезов, мап или кастомных функций.
🏎 Параллельная обработка (FanOut): ускоряйте вычисления, разделяя данные между несколькими обработчиками.
🔗 Объединение потоков (FanIn): собирайте результаты из разных каналов для дальнейшей обработки.
🛠 Простота использования: минималистичный API, понятный даже новичкам.

🌐 Проект на GitHub
Когда вы пишете код на Go, управление памятью становится ключевым моментом, влияющим на производительность приложения. В статье рассматривается важный вопрос: когда переменная в Go размещается в куче, а не на стеке?

В Go действует принцип, называемый escape analysis, который определяет, где именно должна быть размещена переменная — в стеке (быстрое управление памятью) или в куче (длительное хранение с управлением через GC). Например:

Если переменная передается из функции наружу (или возвращается), Go определяет, что она «убегает» из локального контекста и помещает её в кучу. Локальные переменные, которые не покидают функцию, обычно остаются на стеке.

Почему это важно? Куча требует затрат на сборку мусора, что может замедлить приложение. Понимание этих механизмов позволяет оптимизировать код: минимизировать аллокации в куче и уменьшить нагрузку на GC.

Оптимизируйте осознанно: инструмент
go build -gcflags="-m"

поможет понять, как компилятор обрабатывает переменные в вашем коде. Это первый шаг к созданию высокопроизводительных приложений!

📎 Подробнее в источнике
👍225👾1
Go всегда славился своей философией минимализма. Когда в версии 1.18 появились дженерики (Generics), разработчики восприняли это как долгожданное улучшение. Но вместе с этим пришли и вопросы: не слишком ли прост этот инструмент для решения сложных задач?

🛠️ C помощью дженериков можно писать код, который работает с разными типами данных, не теряя читаемости и производительности. Это делает их незаменимыми для библиотек и больших проектов.

Преимущества дженериков в Go:

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

Недостатки дженериков в Go:

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

🌐 Подробнее в источнике
👍11👾1
🤖🛠 11 лучших ИИ-инструментов для разработки в 2024 году

В мире разработки программного обеспечения искусственный интеллект становится незаменимым помощником, способным значительно повысить продуктивность и качество кода. Представьте себе инструменты, которые не только автоматически дополняют ваш код, но и генерируют целые фрагменты, преобразуют дизайн в готовый код и обеспечивают безопасность вашего приложения. Хотите узнать, какие ИИ-инструменты помогут вам быть на шаг впереди в 2024 году? Откройте для себя решения, которые сделают ваш рабочий процесс более эффективным и инновационным.

🔗 Читать статью
🔗 Зеркало
Черные скидки на курсы в Академии!

-40% до конца ноября

🔥 В честь Черной пятницы до 30 ноября запускаем распродажу на все курсы proglib.academy и дарим промокод на сумму 10 000 на технику в магазине DigitalRazor (отправим вам по запросу)

🎁 Анонс новогоднего сюрприза!

🎄 Те, кто успеет приобрести курсы с 27 ноября по 27 декабря, получат шанс выиграть крутой новогодний подарок.
Что это будет, пока держим в секрете – следите за новостями на нашем канале!

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

⚫️ Опытные преподаватели
Вас будут обучать доценты ВМК МГУ по математике, а алгоритмы расскажет разработчик из Яндекса и преподаватель МФТИ и НИУ ВШЭ.

⚫️ Бессрочный доступ ко всем курсам
Проходите обучение в удобном для вас темпе, без давления жестких сроков.

⚫️ Поддержка преподавателей
Не останетесь одни — вам всегда помогут разобраться с трудными темами и ответят на любые вопросы через чат и платформу Coreapp.

👉 Не уверены, подойдет ли вам курс? Начните с бесплатных вводных занятий и познакомьтесь с преподавателями и форматом обучения –

Ждем вас на обучении! 🙌
🥱3👍2
🌐🎯 Обновление Rate-Shield: ещё быстрее и удобнее

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

Что нового?

1. Поддержка Sliding Window
Теперь Rate-Shield поддерживает алгоритм скользящего окна, который позволяет плавно ограничивать запросы без резких отказов, обеспечивая более равномерное распределение нагрузки.

2. Локальное кэширование
Правила ограничения скорости теперь кэшируются локально, что значительно ускоряет работу и снижает нагрузку на систему.

3. Интеграция со Slack
Настройка уведомлений о превышении лимитов в Slack упрощает мониторинг и позволяет быстрее реагировать на инциденты.

4. Оптимизация многопоточности
Использование пула горутин в обработке запросов делает Rate-Shield ещё быстрее и эффективнее.

📎 Подробнее в официальном репозитории
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Лучшие ресурсы, чтобы не отставать от трендов из мира Go.

👣 Golang Go - авторский канал, посвященный Go разработке, Devops и созданию высоконагруженных сервисов.

📚 Golang books редкая литература , статьи, курсы и уникальные гайды для Golang специалистов любого уровня. Читайте, развивайтесь, практикуйте.

💼 Golang Jobs — актуальные предложения для Golang разработчиков от самых крупных работодателей и лидеров рынка.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰5🤩3👍2
Статья «Go Ducks!» рассказывает о том, как Go реализует интерфейсы, и использует метафору с уткой, чтобы объяснить принцип работы с ними. В Go интерфейсы — это не декларации, как в других языках, а неявные реализации. Тип реализует методы, которые ожидает интерфейс — он автоматически становится совместим с этим интерфейсом, даже если явно не указывает, что реализует его.

Вместо явного указания типа как реализацию интерфейса, например, через
type Duck struct {}

и
func (d Duck) Quack() {}

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

📎 Подробнее в источнике
👍17👏2
📜 ТОП-15 международных IT-сертификаций, которые увеличат твой доход в 2025 году

Хочешь знать, какие «корочки» реально поднимут твою зарплату? Исследование Skillsoft раскрыло ТОП-15 самых денежных IT-сертификаций. Спойлер: облака и безопасность рулят.

👉 Читать статью
🥱7👍31
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Напоминаем: у нас можно (и нужно) купить рекламу

→ Более 60 телеграм-каналов по всем направлениям IT
→ Почти 1,2 миллиона аудитории
→ Собственное медиа и сайт с DAU 25 000 — можем усилить продвижение
→ Классные email-рассылки
→ И, конечно же, крутые контент-менеджеры, которые сделают нативную интеграцию/придумают виральный пост/реализуют любые контентные предпочтения

Для заказа пишите сюда: @proglib_adv
👍52😁2🤩1
🚀 Улучшите качество вашего Go-кода с go-test-coverage!

Качество кода и надежные тесты — ключ к успешным проектам. Проект go-test-coverage предлагает инструменты для детального анализа покрытия кода тестами, что помогает разработчикам поддерживать и улучшать стандарты своих проектов.

🔍 Что делает go-test-coverage?
Узнайте, какая часть вашего кода протестирована, а какие участки остаются без внимания.
Генерируйте отчеты в формате HTML или XML, чтобы легко интегрировать их в CI/CD пайплайны.
Просматривайте графические отчеты, которые наглядно показывают, какие строки кода покрыты тестами.
Устанавливайте минимальные уровни покрытия. Если покрытие падает ниже заданного, инструмент уведомит вас об этом.

🛠 Как начать использовать go-test-coverage:

1. Установка: Следуйте инструкциям в README репозитория для установки инструмента.
2. Запуск тестов с покрытием:
go test -coverprofile=coverage.out ./...

3. Генерация отчета:
go-test-coverage -input=coverage.out -output=coverage.html

4. Анализ результатов:
Откройте coverage.html в браузере для визуального анализа покрытия и определения областей, требующих дополнительных тестов.
1👍6👏4
🛠 Как работает сериализация и десериализация с Protobuf в Go?

Protocol Buffers — это эффективный и компактный бинарный формат сериализации данных, который активно используется в микросервисах и распределённых системах. В этой статье мы разберём, как работает процесс сериализации и десериализации данных с использованием Protobuf в языке Go.

🎯 Сериализация в Protobuf заключается в преобразовании структуры данных в бинарный формат, который можно передать по сети или сохранить. Protobuf кодирует каждый элемент данных как пару: тег (номер поля) и значение, что позволяет существенно уменьшить размер данных по сравнению с текстовыми форматами, такими как JSON.

🎯 Процесс десериализации — это обратная операция: бинарный поток данных преобразуется обратно в структуру, понятную для приложения. Go-библиотека для Protobuf эффективно управляет этим процессом, обеспечивая высокую производительность и минимальные потери данных.

Преимущества Protobuf:
- Сериализация и десериализация проходят значительно быстрее, чем в случае с JSON или XML.
- Бинарный формат требует меньше места для хранения и передачи данных.
- Protobuf поддерживает множество языков, включая Go, Python, Java и другие, что облегчает интеграцию между различными системами.

🌐 Пример использования библиотеки и кода можно найти в статье
🔥5🤔5👍21🥰1
🧠💻 Как стать успешным программистом: 6 ключевых качеств профессионального разработчика

Думаешь, чтобы стать крутым программистом, нужен диплом престижного вуза? А вот и нет. Опытные разработчики уверены: гораздо важнее правильный подход к работе и готовность учиться на своих ошибках. И знаешь что? Этому может научиться каждый.

👉🏼 Читать статью
👍4🔥1
🛠️ new vs make в Go: В чем разница?

В Go есть две ключевые функции для работы с памятью: new и make. Они выглядят схожими, но их использование и назначение значительно различаются.

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

2. make — используется только для срезов, карт и каналов. Она инициализирует структуры данных и возвращает сам объект, а не указатель. В случае среза это означает создание внутренней структуры с указателем на массив, длиной и ёмкостью.

В отличие от new, make гарантирует, что данные готовы к использованию сразу после вызова.
👍11🤔4