Библиотека 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
⚙️ Подпишись на нашу еженедельную email-рассылку, чтобы быть в курсе последних открытий и тенденций в мире бэкенда.

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

👉Подписаться👈
🚀 Оптимизация и стресс-тесты в Go с флагом -cpu

Когда речь идет о тестировании производительности и устойчивости приложений, работающих в многопоточной среде, Go предоставляет отличный инструмент — флаг -cpu. Этот параметр позволяет запускать тесты с разным количеством логических процессоров (GOMAXPROCS), моделируя реальное поведение приложения в условиях разного уровня параллелизма.

📌 Как работает флаг -cpu?
Флаг -cpu указывается при запуске тестов и задаёт список значений, с которыми тесты должны быть выполнены. Например:
go test -cpu=4,5

👉 Этот пример запустит тесты дважды:
1️⃣ С четырьмя логическими процессорами.
2️⃣ Затем с пятью.

🛠 Зачем это использовать?
Тестирование под разной нагрузкой: использование нескольких значений -cpu позволяет понять, как ваше приложение поведёт себя на системах с разным количеством ядер.
Поиск узких мест: помогает выявить проблемы в конкурентном доступе, такие как гонки данных или узкие места в производительности.
Реализм тестов: ваш код проверяется в условиях, максимально приближенных к реальной эксплуатации.

🔑 Ключевые моменты:
Можно указать несколько значений через запятую, например -cpu=1,2,4,8, чтобы протестировать приложение в разнообразных сценариях.
Если -cpu не задан, тесты запускаются с текущим значением GOMAXPROCS.
Практическая выгода: Регулярное использование -cpu в тестах повышает устойчивость вашего кода и предотвращает неожиданные проблемы при высоких нагрузках.

💡 Пример для продвинутых:
Если вы хотите протестировать код на нескольких уровнях параллелизма, запустите:
go test -cpu=1,2,4,8 -v

📊 Результат: тесты покажут, как приложение справляется с 1, 2, 4 и 8 логическими процессорами. Это отличный способ убедиться, что ваш код работает эффективно и безопасно в конкурентной среде.

#tip
Please open Telegram to view this post
VIEW IN TELEGRAM
🕹🕹 Подборка игр для программистов и любителей логики

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

1️⃣ Human Resource Machine
📜 Жанр: логическая головоломка.
💡 Описание: в этой игре вы программируете маленького офисного сотрудника-робота для выполнения задач. Простая и увлекательная концепция, которая помогает развить алгоритмическое мышление.
⏱️ Длительность: подходит для прохождения за пару вечеров.

2️⃣ The Witness
📜 Жанр: головоломка от первого лица.
💡 Описание: исследуйте красочный остров, полный логических пазлов. Каждая загадка требует внимания, пространственного мышления и способности находить закономерности.
⏱️ Длительность: подойдет для тех, кто готов посвятить игре несколько дней.

3️⃣ Baba Is You
📜 Жанр: логическая игра.
💡 Описание: уникальная игра, где правила буквально можно менять на ходу. Сдвигая блоки, вы переписываете законы мира, создавая собственные решения для головоломок.
⏱️ Длительность: зависит от вашей изобретательности, но можно пройти основные уровни за пару вечеров.

4️⃣ Game Dev Tycoon
📜 Жанр: симулятор разработки игр.
💡 Описание: постройте свою студию разработки игр, создавайте хиты и управляйте процессом. Отличный способ понять, как устроен мир геймдева.
⏱️ Длительность: можно играть долго, но базовые достижения достигаются быстро.

5️⃣ Gunpoint
📜 Жанр: тактический платформер с элементами головоломки.
💡 Описание: в роли шпиона вы используете уникальные гаджеты и хакерские навыки для проникновения в защищенные здания. Игра сочетает элементы логики и экшена.
⏱️ Длительность: идеально подходит для прохождения за пару вечеров.
Please open Telegram to view this post
VIEW IN TELEGRAM
🎄 Начни 2025-й с апгрейдом навыков,
которые откроют двери в мир IT!

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

🔗 Собери свой план и начни путь в IT

Почему это выгодно?

📚 Несколько программ по цене одной — максимальная эффективность: учишься сразу тому, что действительно нужно.

💾 Бессрочный доступ — все материалы всегда под рукой, чтобы учиться в своём темпе.

💸 Знания, которые окупятся — навыки, востребованные в любой точке мира.
Какие навыки ты можешь прокачать?

💡 Математика для Data Science + Алгоритмы и структуры данных
— Подготовка к собеседованиям в FAANG и поступлению в ШАД. Решай сложные задачи, работай с данными и моделями на профессиональном уровне.

💡 Алгоритмы и структуры данных + ML
— Улучшай своё алгоритмическое мышление и изучай базовые методы машинного обучения, чтобы создавать интеллектуальные приложения.

💡 Frontend Basic + Базовые модели ML
— Построй свою первую веб-страницу и погрузись в мир ML: от нейросетей до ML-бустинга.

💡 Архитектуры и шаблоны проектирования + Математика для Data Science
— Развивай аналитическое мышление и учись проектировать устойчивые системы.

💡 Алгоритмы и структуры данных + Frontend Basic
— Получи полный набор навыков: от оптимизации алгоритмов до создания современных веб-приложений.

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

🔗 Составь свой IT-маршрут сейчас или выбери курс по новогодней скидке
🌟 Уже 2025 год: Время обновить свою ide для Go! 🚀

Разработка на Go продолжает набирать популярность, и если вы все еще используете старые настройки для Visual Studio Code, пора идти в ногу со временем! В статье вы найдете подробное руководство по тому, как сделать вашу IDE максимально удобной и продуктивной.

🔧 Что нужно для старта:
Go (1.22 и выше): Последние версии языка — не только про производительность, но и про новые возможности.
VS Code: Самая гибкая IDE для работы с Go.
Git: Без контроля версий в 2025 году никуда.

🚀 Что настроить в VS Code:
Расширения, без которых нельзя:
Go (ms-vscode.go): официальное расширение для автодополнения, отладки и работы с тестами.
Error Lens: чтобы ошибки были видны сразу, прямо в коде.
GitLens: лучшая интеграция с Git.
Go Test Explorer: легкое управление тестами.

Настройка settings.json:
Автоматическое обновление инструментов Go.
Использование Language Server для лучшей поддержки языка.
Подсказки, которые делают код читабельным.
Горячие клавиши: Настройте свои любимые шорткаты, чтобы ускорить работу в разы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠 DebugString() в Go: псевдостандарт для удобной отладки

Недавно в блоге DoltHub вышла интересная статья о неформальном подходе к отладке структур в Go с помощью метода DebugString().

📜 Что такое DebugString()?
Это метод, который используется для получения детального текстового представления структур данных. В отличие от String(), предназначенного для пользовательского вывода, DebugString() раскрывает больше технических деталей, которые полезны разработчикам во время отладки.

Пример:
type Example struct {  
Field1 int
Field2 string
}

func (e Example) DebugString() string {
return fmt.Sprintf(
"Example{Field1: %d, Field2: %q}",
e.Field1,
e.Field2)
}

📌 Почему это полезно?
DebugString() помогает легко визуализировать внутреннее состояние объектов.
Вы можете отделить пользовательский вывод (String()) от отладочного, чтобы не показывать конфиденциальную информацию.
Этот метод может быть добавлен к любым типам, не нарушая существующую функциональность.

🤨 Почему это псевдостандарт?
Go не навязывает DebugString() как обязательный метод, но его использование становится популярным среди библиотек, где требуются расширенные возможности отладки. Это хороший пример того, как в сообществе Go рождаются практичные и неформальные стандарты.
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Хотите порешать задачи?

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

📂 Как всё устроено?
Каждая задача – это отдельная папка с:
Описанием в README.md, чтобы вы точно поняли, что делать.
Тестами в *_test.go, которые не дадут схалтурить.

🛠 Что делать?
1️⃣ Читаем задание в README.md.
2️⃣ Пишем решение на Go.
3️⃣ Запускаем тесты и радуемся (или ищем баги, если тесты падают).

🔥 Подходит как для новичков, так и для бывалых разработчиков, которые любят прокачивать скиллы через практику. А если сделаете самое элегантное решение и успеете быстрее всех, то вас увековечат в репозитории!
Please open Telegram to view this post
VIEW IN TELEGRAM
🎮 DOOM как искусство? Да!

Вы когда-нибудь думали, что DOOM — это не просто игра, а настоящее искусство? Если нет, то "DOOM: The Gallery Experience" вас переубедит.

🖼 Что это?
Это необычная галерея, где уровни культового шутера превращены в экспонаты. Вас ждёт прогулка по знакомым аренам, но теперь вместо демонов — атмосфера спокойствия и эстетики. Звучит абсурдно? Возможно. Но выглядит невероятно!

Чем цепляет?
Ретро-дизайн DOOM сочетается с музейной атмосферой.
Музыка и освещение создают уютное ощущение — никакого стресса, только удовольствие.
Каждый уголок можно рассматривать как арт-объект, а не поле боя.
Please open Telegram to view this post
VIEW IN TELEGRAM
📦 Пакет embed в Go

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

💡 Зачем использовать embed?
С помощью директивы //go:embed вы можете встроить файлы (например, HTML, CSS, конфигурационные файлы или изображения) прямо в бинарный файл. Это исключает необходимость поставлять эти файлы отдельно, и ваши приложения становятся более компактными и безопасными.

🛠 Как это работает?
Вы указываете директиву //go:embed перед переменной.
Используете типы данных string для текстовых файлов, []byte для бинарных данных или embed.FS для работы с целыми директориями.

🚀 Пример использования:
package main

import (
"embed"
"fmt"
)

//go:embed hello.txt
var hello string

func main() {
fmt.Println(hello)
}

В этом примере файл hello.txt встроен в приложение, и его содержимое доступно как строка.

Почему стоит использовать embed?
Удобство развертывания: всё в одном файле — не нужно беспокоиться о поставке отдельных файлов.
Безопасность: встроенные файлы не могут быть изменены после компиляции.
Автономность: ваши приложения не зависят от внешних файлов и легко переносятся между окружениями.

Когда не стоит использовать embed?
Когда нужно работать с динамически изменяющимися файлами (например, конфигурациями, которые могут меняться в процессе работы приложения).
Для очень больших файлов, так как это увеличивает размер бинарника.
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет! 👋

Очень интересно: читаете ли вы что-то, кроме технической литературы? И нет, книги по agile не в счёт — это точно не сказки!

👇Пишите свои мнения в комментарии!

#интерактив
Please open Telegram to view this post
VIEW IN TELEGRAM
🔫 Сортировка Сталина: как избавиться от «неугодных» элементов в последовательности

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

Как работает «сортировка»?
1️⃣ Проходим по массиву и проверяем каждый следующий элемент.
2️⃣ Если элемент меньше предыдущего, его "удаляем" (не включаем в итоговую последовательность).
3️⃣ В результате получаем подпоследовательность, которая является возрастающей.
Please open Telegram to view this post
VIEW IN TELEGRAM
📝 NoCopy Convention в Go: оптимизация работы с памятью

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

↗️ Конвенция NoCopy советует передавать большие структуры или массивы по указателю, а не по значению. Это позволяет работать с данными без их излишнего копирования, экономя память и улучшая производительность.
Например, если у вас есть большая структура, передавайте её как указатель в функцию, чтобы избежать создания копий.

🤩 Этот подход полезен в случае, когда требуется эффективно управлять памятью и ускорить выполнение программы. Но важно помнить о возможных рисках, например, необходимости контроля за нулевыми указателями.

👉 Для более подробного объяснения и примеров, загляните в статью
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩 Улучшение тестов на Go: почему стоит использовать "if got, want"

Техника проверки if got != want { t.Errorf(...) } в тестах Go — это простой и эффективный способ проверки значений, который полностью соответствует философии языка. Она не требует сторонних библиотек, остаётся прозрачной и легко читаемой, что особенно важно для минималистичного и понятного кода.

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

👀 Подробнее про технику с примерами кода можно почитать тут
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 Помните сортировку Сталина? Встречайте милосердную версию!

Недавно наткнулись на интересный проект — MercifulStalinSort. Если помните, в сортировке Сталина элементы, нарушающие порядок, безжалостно удаляются. Итог — массив вроде бы отсортирован, но какой ценой? 😅

Милосердный Сталин идёт другим путём:
🔸 Забираем из основного массива элементы, которые стоят не по возрастанию
🔸 Затем из дополнительного массива в обратном порядке забираем те элементы, которые стоят не по убыванию
🔸 После чего нужно просто объединить получившиеся массивы. Если остались неотсортированные элементы, то обработать их рекурсивно

Идея проста, но алгоритм получился намного более «сострадательным», сохраняя больше данных. Конечно, это больше про эксперимент и юмор, чем про реальную производительность, но попробовать его в деле — уже весело!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔠🔠 Краткий обзор на Echo

Echo — это высокопроизводительный и простой в использовании веб-фреймворк, созданный для разработки приложений на языке Go. Его минимализм, гибкость и богатый набор функций делают Echo популярным выбором для создания REST API, микросервисов и веб-приложений.

Ключевые особенности Echo:
Высокая производительность: echo использует минимальные ресурсы и обеспечивает быстрый отклик благодаря оптимизированной маршрутизации и обработке HTTP-запросов.

Удобная маршрутизация: поддерживает простую маршрутизацию с возможностью использования переменных и параметров URL:
e.GET("/users/:id", getUser)
e.POST("/users", createUser)


Шаблоны: поддерживает интеграцию с шаблонизаторами для рендеринга HTML-страниц.

WebSocket и SSE: встроенная поддержка современных технологий реального времени, таких как WebSocket и Server-Sent Events.

Простая интеграция: echo легко интегрируется с другими библиотеками Go, такими как ORM (GORM, Ent), библиотеки для работы с базами данных или очередями.


Пример Hello World с использованием Echo:
func main() {
e := echo.New()

e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})

e.Logger.Fatal(e.Start(":8080"))
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🔧 Go: Структуры, интерфейсы и внедрение зависимостей – проще, чем кажется!

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

🛠 Что вы узнаете?
🔠Структуры: как моделировать реальные данные с помощью полей и методов.
🔠Интерфейсы: как задавать контракты между типами и отделять детали реализации от общей логики.
🔠Внедрение зависимостей: как сделать ваш код модульным и тестируемым, передавая зависимости через параметры конструктора или функции.

💡 Почему это важно?
Гибкость: интерфейсы позволяют заменить реальные зависимости на моки, что упрощает тестирование.
Удобство изменений: структура кода остаётся простой при добавлении новых функций.
Производительность: Go минималистичен, и внедрение зависимостей здесь проще, чем в других языках.
Please open Telegram to view this post
VIEW IN TELEGRAM