Библиотека 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-скилы и железная логика выжить в «Игре в кальмара»! Один panic без recover может стать фатальным 💀🦑

🎯 Пройти тест
⭐️ Gowebly: современный инструмент для веб-разработки на Go

Разработка веб-приложений на Go становится ещё проще с Gowebly — инструментом командной строки, который сочетает мощь Go и современные веб-технологии. Если вы хотите быстро создавать быстрые и удобные веб-приложения, этот инструмент вам точно пригодится!

🚀 Что такое Gowebly?

Gowebly — это CLI для генерации веб-приложений на Go с использованием популярных фреймворков (Fiber, Gin, Echo и других) и интеграции с современными библиотеками для интерфейса, такими как htmx, hyperscript, Alpine.js и CSS-фреймворками (Tailwind CSS, Bootstrap и др.).

🔑 Ключевые возможности
Поддержка популярных Go-фреймворков
Генерация проектов с Fiber, Gin, Echo, Chi и другими фреймворками.

Современные интерфейсные технологии
Быстрая интеграция с htmx, Alpine.js и другими инструментами для создания динамических пользовательских интерфейсов.

CSS-фреймворки на выбор
Tailwind CSS, Bootstrap, UnoCSS — выбирайте то, что подходит вашему проекту.

Hot Reloading
Горячая перезагрузка шаблонов позволяет ускорить процесс разработки.

PWA-ready
Создавайте прогрессивные веб-приложения, готовые к установке на устройства.

Простота кроссплатформенной работы
Работает на Linux, macOS, Windows (включая WSL).
Please open Telegram to view this post
VIEW IN TELEGRAM
Композиция в Go: как избежать скрытых проблем с интерфейсами

Композиция — одна из ключевых особенностей Go, позволяющая строить гибкие и переиспользуемые компоненты. Однако сочетание композиции с неявными интерфейсами может привести к неожиданным проблемам. В статье описывается реальная ситуация, где композиция поверх http.ResponseWriter нарушила работу Server-Sent Events (SSE).

Что произошло?
При добавлении кастомного функционала через композицию (встраивание) http.ResponseWriter, автор столкнулся с проблемой: неявные интерфейсы, такие как http.Flusher, перестали поддерживаться.
SSE, зависящие от возможности «сбрасывать» данные (Flush), перестали корректно работать.

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

Проблема с композицией:
Когда вы создаете собственную структуру, добавляя к ней http.ResponseWriter через композицию, интерфейс http.Flusher перестает быть реализованным:

type CustomWriter struct {
http.ResponseWriter
status int
}

func (cw *CustomWriter) WriteHeader(code int) {
cw.status = code
cw.ResponseWriter.WriteHeader(code)
}

Такой код работает для базовой обработки, но если клиент рассчитывает на интерфейс http.Flusher (например, для Server-Sent Events), он больше не доступен. SSE не будут работать корректно.

💡 Решение проблемы
Чтобы восстановить функциональность, автор явно реализовал недостающие методы в композируемой структуре. Например, был добавлен метод Flush в кастомный объект.

// Реализация метода Flush для поддержки интерфейса http.Flusher
func (cw *CustomWriter) Flush() {
if flusher, ok := cw.ResponseWriter.(http.Flusher); ok {
flusher.Flush()
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🎨 Новый канал для вдохновения — UX in GIF

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

📌 Чем полезен канал?

→ Идеи для дизайна интерфейсов.
→ Анимации, которые можно повторить или адаптировать.
→ Лёгкий способ искать вдохновение перед новым проектом.

👉 Подписывайтесь и вдохновляйтесь: UX in GIF
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖🎓 SmartClass: как научить AI проверять домашки программистов

Автоматизация рутинных задач — один из главных трендов в IT, но как насчет проверки домашек? Представьте себе систему, которая не только оценивает код студентов, но и помогает им понять свои ошибки, словно опытный наставник. Звучит как фантастика? В статье рассказывается, как проект SmartClass воплощает эту идею в реальность, используя возможности AI. Узнайте, какие технологии лежат в основе, с какими трудностями сталкиваются разработчики и как это меняет обучение программированию.

📎 Подробнее о том, как AI помогает проверять домашние задания
💡Как эффективно управлять уязвимостями в проектах на Go

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

Почему важно реагировать на уязвимости?
Никто не застрахован от появления уязвимостей в сторонних библиотеках или собственном коде. Даже если ваш проект работает стабильно, игнорирование уведомлений о безопасности может привести к катастрофическим последствиям. К примеру, недавно обнаруженные уязвимости в пакетах golang.org/x/net и golang.org/x/crypto стали ярким напоминанием о необходимости регулярного мониторинга безопасности.

🤨 Какие инструменты помогут?
Для выявления уязвимостей и управления зависимостями в Go существуют специализированные инструменты. Один из них — govulncheck, который позволяет анализировать зависимости проекта и находить известные уязвимости. Этот инструмент интегрируется с базой данных уязвимостей Go и предоставляет четкие рекомендации по их устранению.

Кроме того, если ваш проект включает Docker-образы, стоит обратить внимание на Docker Scout. Этот инструмент позволяет сканировать образы на наличие уязвимых компонентов и предоставляет подробные отчеты для их устранения.

🤨 Как начать?
Если вас заинтересовала тема управления уязвимостями в Go, обратите внимание на полезный гайд, в котором подробно описаны шаги по настройке govulncheck, работе с Docker Scout и обновлению зависимостей. Статья помогает не только понять, как реагировать на уведомления о безопасности, но и делает акцент на необходимости регулярного анализа кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Go Generics: Работа с constraints.Comparable

Обобщения (generics) в Go стали одной из самых обсуждаемых функций языка. Давайте разберёмся, как использовать ограничение constraints.Comparable, чтобы создавать более гибкие и безопасные функции, работающие с любыми типами, поддерживающими сравнение.

Что такое constraints.Comparable?
constraints.Comparable — это ограничение (constraint) из библиотеки golang.org/x/exp/constraints. Оно позволяет работать только с типами, которые поддерживают операции сравнения (==, !=, <, >, <=, >=), такими как числа, строки или булевы значения.

Пример: поиск минимального значения
// Min находит минимальное значение в срезе
func Min[T constraints.Comparable](slice []T) (T, error) {
if len(slice) == 0 {
var zero T
return zero, fmt.Errorf("пустой срез")
}

min := slice[0]
for _, v := range slice[1:] {
if v < min {
min = v
}
}
return min, nil
}

Теперь её можно использовать с любыми типами, которые можно сравнить
func main() {
ints := []int{4, 2, 8, 1, 5}
minInt, _ := Min(ints)
fmt.Println("Минимум:", minInt)

strings := []string{"apple", "banana", "cherry"}
minString, _ := Min(strings)
fmt.Println("Минимум:", minString)
}


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

Ограничение constraints.Comparable: указывает, что тип T должен поддерживать операции сравнения.
Обобщённый параметр T: позволяет функции работать с любыми типами, удовлетворяющими ограничению.
Универсальность: функция Min может быть вызвана как с числами, так и со строками.

🤩 Хочется больше примеров? Читайте статью!
Please open Telegram to view this post
VIEW IN TELEGRAM
🗺 Привычка "срезать углы" при ходьбе – это интуитивное применение алгоритмов?

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

С нашим курсом «Алгоритмы и структуры данных» вы научитесь решать любые сложные задачи так же эффективно.

🎄Начните свой 2025 со скидкой 35% на все курсы. Это лучшее вложении уходящего года – https://proglib.io/w/014fe6d8
🍎 Визуализация вашего кода в один клик!

GitDiagram — это онлайн-инструмент, который позволяет визуализировать структуру и содержимое репозиториев GitHub в виде интерактивных диаграмм.

⚙️ Основные возможности:
Быстрая визуализация: превращает любой репозиторий GitHub в наглядную диаграмму, облегчая понимание структуры проекта;
Простота использования: достаточно заменить 'hub' на 'diagram' в URL любого репозитория GitHub, чтобы получить его визуализацию.

📎 Попробуйте сами! Введите URL интересующего вас репозитория для мгновенной визуализации!

#новость
🏎️ 🎮 Golang на PSP: как язык программирования вышел за пределы серверов!

Что общего между языком Go и портативной консолью PlayStation Portable? На первый взгляд, ничего. Но один разработчик нашёл способ запускать программы на Go на этой культовой консоли! 🚀

💡 Как это возможно?
⚙️ WebAssembly и TinyGo: код на Go компилируется в WebAssembly (WASM) с помощью компилятора TinyGo.
⚙️ Инструменты: WASM преобразуется в C-код с помощью w2c2, а для графики используется библиотека raylib, портированная для PSP.

Зачем это нужно?
📌 Исследование возможностей Go в новых средах.
📌 Вдохновение для ретро-разработчиков и экспериментов с устаревшими устройствами.
📌 Простое хобби для фанатов PSP!

🛠️ Хотите попробовать? Прочитайте статью! Это отличный способ погрузиться в эксперименты с Go и WebAssembly.
🎯 Мини-статья о мьютексе в Go

В статье Линк Мэтью рассказывает, как управлять доступом к общим ресурсам в многопоточности с помощью мьютексов.

Мьютекс (mutual exclusion) гарантирует, что только одна горутина работает с разделяемым ресурсом в каждый момент времени.

В статье наглядно показано:
Что такое мьютекс и как он работает;
Простой пример использования sync.Mutex в Go.
🐌 Читаемость важнее скорости: зачем писать «медленный» код на Go?

Когда речь заходит о написании кода на Go, многие стремятся к максимальной производительности. Но действительно ли это всегда нужно? Джон Арундел из Bitfield Consulting утверждает обратное: в большинстве случаев читаемость кода важнее его скорости.

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

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

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

#новость
Please open Telegram to view this post
VIEW IN TELEGRAM
💻📈 Итоги года Proglib: 2024 год в цифрах и достижениях

Чем вдохновляются разработчики, чтобы создавать новые проекты на Go? Proglib в этом году вновь стал местом, где инженеры обмениваются опытом, изучают тренды и находят полезные материалы.

Итоги года — это не только цифры, но и история роста сообщества, частью которого можете стать и вы!
🌍✈️ 6 идей, как ускорить поиск работы за рубежом

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

👉 Читать статью
Как проверить, пуст ли интерфейс (interface{}) в Go?

В Go интерфейс считается пустым, только если оба его компонента (динамическое значение и тип) равны nil. Однако есть нюансы, о которых стоит знать.

1️⃣ Прямая проверка с == nil
Если интерфейс действительно пустой (значение и тип nil), проверка if myInterface == nil вернет true.
var i interface{}
if i == nil {
fmt.Println("Интерфейс пустой")
}


2️⃣ Проблема с nil и типом
Если интерфейс содержит nil с типом (например, *int), он не будет считаться пустым.
var i interface{} = (*int)(nil)
if i == nil {
fmt.Println("Пустой") // Не выполнится
} else {
fmt.Println("Не пустой") // Вывод: Не пустой
}


3️⃣ Проверка через reflect
Для точной проверки используйте пакет reflect:
import "reflect"

func isEmptyInterface(i interface{}) bool {
return i == nil || reflect.ValueOf(i).IsZero()
}


💡 Итог:
Используйте if i == nil для простых случаев.
Для значений nil с типом — добавьте проверку через reflect.
Не забывайте, что интерфейс с типом, но nil-значением, не считается пустым.
Please open Telegram to view this post
VIEW IN TELEGRAM
Бесплатный курс по фулстек-разработке — реальность 🔥

Под Новый год Дед Мороз приносит подарки, а наши подписчики — собственные курсы! Сергей Дмитриев, который занимается коммерческой разработкой уже 15 лет, поделился с нами своим обучением по созданию веб-сервиса с нуля. В курс входит 141 урок, 28 часов видео, исходный код и чат поддержки для участников.

Подробнее о курсе читайте на Хабре или в телеграм-канале Сергея
С наступающим, Go сообщество! Или уже наступившим!🎆🎆

Уже придумали чем заняться в новом году? 😉
Если нет, то предлагаем вам подборку фильмов и сериалов к просмотру:

🔠 Остановись и гори (2014)
🅰️ Игра в имитацию (2014)
🔠 Revolution OS (2001)
©️ Разрабы (2020)
🔠 Кто я (2014)
Please open Telegram to view this post
VIEW IN TELEGRAM
Давайте признавайтесь в комментариях — что вам подарили? 👇
#интерактив
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM