Библиотека Go-разработчика | Golang
23.3K subscribers
2.07K photos
42 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 1.23

В версии Go 1.23 стандартная библиотека пополнилась пакетами slices и maps, которые предоставляют удобные функции для работы с коллекциями.

Основные возможности:
🎯 Функции slices.All(), slices.Backwards(), maps.All(), maps.Keys() и maps.Values() позволяют легко перебирать элементы слайсов и мап с использованием ключевого слова range.

🎯 Функция maps.Collect() упрощает создание новых мап из слайсов, сокращая код с нескольких строк до одной.

🎯 С помощью slices.Sorted() можно получить отсортированные срезы ключей или значений мапы, обеспечивая предсказуемый порядок элементов.

🎯 Функции slices.Clone() и maps.Clone() позволяют создавать копии слайсов и мап, а slices.Concat() облегчает объединение нескольких слайсов в один.

#новость
🔥39👍7🤔2
🆚⚡️ Python FastAPI vs Go: Кто быстрее?

Выбираете между Python FastAPI и Go (Golang) для разработки веб-приложений? Это видео разбирает их производительность и помогает определиться с выбором технологии. Вот ключевые моменты теста! 👇

Что тестировали?
1️⃣ Базовый тест производительности: простые запросы и ответы.
2️⃣ Работа с базой данных Postgres: проверка скорости взаимодействия.
3️⃣ Кэширование через Memcache: нагрузка в сложных сценариях.

🏁Результаты
Go
🔥 Отличная производительность при высоких нагрузках.
💪 Минимальные задержки при работе с базой данных и кэшированием.
Подходит для приложений, где критичны скорость и масштабируемость.

FastAPI (Python)
⚡️ Удобство разработки и читабельность кода.
💻 Богатая экосистема Python-библиотек.
🚀 Хорошо справляется с умеренными нагрузками, но уступает Go в пиковых ситуациях.

Что выбрать?
Выбирайте Go, если нужна высокая производительность и низкие задержки. Это идеальный выбор для микросервисов и высоконагруженных систем.
FastAPI подойдёт, если вы цените скорость разработки и интеграцию с библиотеками Python. Отличный выбор для прототипов и приложений средней нагрузки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🌚5🤔2
🛠️ Логирование в Go: всё, что нужно знать

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

В одной из недавних статей этот пакет рассматривается детально: начиная от стандартных возможностей и заканчивая кастомизацией логгеров для более сложных задач. Вот основные моменты:

📋 Методы логгирования: разбираются основные методы (Print, Printf, Panic, Fatal и другие), их отличия и подходящие случаи использования.
🎛️ Настройка логгера: рассматриваются инструменты для изменения формата сообщений, добавление префиксов, а также перенаправление логов, например, в файл.
🚀 Пользовательские логгеры: описывается создание собственных логгеров для более гибкой работы с потоками вывода и форматирования.
👍9🤩3🥱3❤‍🔥11
🔥 Go vs Python: Раунд 2

На этот раз в центре внимания видео — облачные технологии: Kubernetes, OpenTelemetry, Prometheus, Postgres и S3. Оба языка протестированы в условиях микросервисной архитектуры.

Go:
⚡️ Молниеносный отклик и минимальная нагрузка на ресурсы.
💪 Устойчивость под нагрузкой.

Python:
🚀 Быстрый старт и удобство разработки.
🐢 Уступает Go в скорости при высоких нагрузках.

📊 Итог:
Go побеждает на длинных дистанциях, Python выигрывает на коротких. Выбор за вами! 👊
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱27👍123😁2
🚀 Korm: высокопроизводительный и удобный ORM для Go

Если вы ищете инструмент, который упрощает работу с базами данных и обеспечивает высокую производительность, познакомьтесь с Korm! Это ORM для Go, вдохновленный Django, но с акцентом на простоту, скорость и современные подходы к разработке.

🔑 Особенности Korm:
Молниеносная скорость: korm способен обрабатывать до 44 000 запросов в секунду — это один из самых быстрых ORM на рынке. Если ваши приложения требуют высокой производительности, Korm — отличный выбор.

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

Событийная шина данных (Event Bus): с помощью функции WithBus Korm позволяет синхронизировать данные между несколькими приложениями, используя сетевую событийную шину. Это делает фреймворк особенно полезным для работы в распределенных системах.

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

TLS-сертификаты под ключ: korm автоматически обрабатывает сертификаты TLS с помощью Let's Encrypt, упрощая развертывание приложений в защищенной среде.

Поддержка асинхронности и конкурентной обработки: korm спроектирован для работы в многопоточных средах, что делает его идеальным выбором для высоконагруженных приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍91😁1🤔1
🔄 Итераторы для пагинации API на Go: эффективная обработка данных

Работа с постраничными API — задача, знакомая каждому, кто пишет на Go. Но вместо того, чтобы тратить время на ручное управление запросами и ответами, можно использовать мощные инструменты стандартной библиотеки Go 1.23.

Итераторы — это способ автоматизировать пагинацию, делая код читаемым и гибким. С итератором вы сможете:

🚀 Обрабатывать данные без лишнего кода: забудьте о ручной обработке страниц, переключениях и урлах.
🔧 Упростить тестирование: используйте мок-объекты для проверки функциональности итератора без реального API.
🛠️ Повысить читаемость и масштабируемость кода: пишите лаконичные и удобные решения для сложных задач.

Если работа с REST API и пагинацией — часть ваших задач, итераторы могут стать тем инструментом, который вы давно искали. Время писать и тестировать код так, чтобы он работал за вас!
👍10🤔3🥱3😢2
🔢 iota в Go: магия автоматических констант

Что такое iota?
iota — это встроенный идентификатор в Go, используемый для генерации последовательных числовых значений внутри блока const. Он начинается с 0 и увеличивается на 1 в каждой новой строке.
go 
const (
A = iota // 0
B // 1
C // 2
)
fmt.Println(A, B, C)


💡Когда iota полезен?
1️⃣ Для последовательных значений:
iota автоматически увеличивается на 1, что идеально для создания счётчиков или статусов.

2️⃣ Для битовых флагов:
Используя iota, можно легко генерировать битовые флаги:
const (
Read = 1 << iota // 1
Write // 2
Execute // 4
)
fmt.Println(Read, Write, Execute)


3️⃣ Для вычислений:
iota можно использовать для создания сложных последовательностей. Например:
const (
KB = 1 << (10 * iota) // 1024
MB // 1048576
GB // 1073741824
)
fmt.Println(KB, MB, GB)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34❤‍🔥8👾1
До Нового года мало времени, а до успеха в IT — всего один сертификат

Курсы от Proglib Academy — это крутой подарок для тех, кто интересуется IT, хочет освоить новую профессию и жить в шоколаде.

Почему сертификат на наши курсы — хороший презент:

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

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

🚀 Подарите возможность начать год с полезных знаний и карьерного роста → подробнее о сертификатах
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6👍1
🔄 Timeouts в Go: Управление длительными задачами

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

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

🚀 Как реализовать таймауты в Go?
Go предлагает несколько удобных инструментов для работы с таймаутами. Вот несколько примеров:
1️⃣ Контексты с таймаутом
Контекст позволяет задавать ограничение по времени, которое автоматически завершит задачу при превышении лимита.
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

result := make(chan string)

go func() {
time.Sleep(3 * time.Second) // Долгая операция
result <- "Задача завершена"
}()

select {
case res := <-result:
fmt.Println("Результат:", res)
case <-ctx.Done():
fmt.Println("Таймаут:", ctx.Err())
}

Зачем использовать?
Это гибкий способ контролировать выполнение задач с возможностью передать контекст в функции.

2️⃣ Таймауты с time.After
Функция time.After позволяет просто установить ограничение времени для выполнения задачи.
done := make(chan string)

go func() {
time.Sleep(3 * time.Second) // Долгая операция
done <- "Успешно выполнено"
}()

select {
case res := <-done:
fmt.Println(res)
case <-time.After(2 * time.Second):
fmt.Println("Таймаут! Слишком долго")
}

Когда использовать?
Когда нужен быстрый и простой способ контролировать длительные операции.

3️⃣ HTTP-запросы с таймаутом
Для работы с сетевыми запросами Go предоставляет возможность задавать таймаут на уровне HTTP-клиента.
client := http.Client{
Timeout: 2 * time.Second,
}

_, err := client.Get("https://httpstat.us/200?sleep=3000")
if err != nil {
fmt.Println("Ошибка запроса:", err)
} else {
fmt.Println("Запрос выполнен успешно!")
}

Преимущество:
Контроль времени выполнения сетевых операций без дополнительных инструментов.

📌 Почему это важно?
Избежание зависаний: таймауты предотвращают блокировку программы.
Оптимизация ресурсов: долгие задачи прерываются, освобождая память и процессор.
Улучшение UX: пользователи быстрее получают обратную связь, даже если операция не удалась.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍162
🦑👨💻 Программист в «Игре в кальмара»: каковы твои шансы выжить?

Каждый день укрощаете горутины и собираете микросервисы? 🔧

Проверьте, помогут ли вам Go-скилы и железная логика выжить в «Игре в кальмара»! Один panic без recover может стать фатальным 💀🦑

🎯 Пройти тест
🥱82👍2🌚1
⭐️ 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
🔥10👍5😁3🥰1
Композиция в 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
👍5👾4👏2
🎨 Новый канал для вдохновения — UX in GIF

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

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

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

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

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

📎 Подробнее о том, как AI помогает проверять домашние задания
👾1
💡Как эффективно управлять уязвимостями в проектах на 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
5👏1👾1
🤔 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
12👍6🔥2
🗺 Привычка "срезать углы" при ходьбе – это интуитивное применение алгоритмов?

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

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

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

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

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

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

#новость
❤‍🔥5👍5😢21🤔1
🏎️ 🎮 Golang на PSP: как язык программирования вышел за пределы серверов!

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

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

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

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

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

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

В статье наглядно показано:
Что такое мьютекс и как он работает;
Простой пример использования sync.Mutex в Go.
👍121🥱1