Библиотека 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
🔥 Знакомьтесь, Fuego (или огонь по-испански)
Fuego — это легковесный фреймворк для Go, предназначенный для ускорения разработки веб-приложений. Его особенность заключается в минималистичном подходе: с помощью небольшого объема кода вы можете развернуть мощный сервер, включая такие возможности, как рендеринг HTML, автоматическая генерация OpenAPI-спецификаций и удобная работа с middleware.

✔️Основные возможности:
Быстрый старт: минимальный пример веб-сервера состоит из пары строк кода, благодаря встроенному управлению маршрутами и простому синтаксису.
Интеграция с OpenAPI: автоматическая генерация спецификаций для вашего API, что упрощает документирование и тестирование.
Гибкость в работе с данными: поддержка сериализации/десериализации, валидации и трансформации данных на входе и выходе.
Рендеринг HTML: интеграция с различными инструментами, такими как html/template, Gomponents и Templ.
Hot Reload: возможность изменять код без перезапуска сервера, что значительно ускоряет разработку.

➡️Пример простого сервера с использованием фреймворка:
package main

import (
"github.com/go-fuego/fuego"
)

func main() {
s := fuego.NewServer()

fuego.Get(s, "/", helloWorld)

s.Run()
}

func helloWorld(c fuego.ContextNoBody) (string, error) {
return "Hello, World!", nil
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🥱5👍2
💾 CDC vs Outbox: как решить проблему двойной записи в распределенной системе

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

Как избежать проблем двойной записи? Современные подходы, такие как захват изменений данных (CDC) и паттерн Outbox, предлагают интересные решения. Эти методики позволяют поддерживать целостность данных, избегать сбоев и минимизировать риски.

Хотите узнать, как внедрить такие подходы и выбрать оптимальный для своей системы? Загляните в захватывающее руководство, чтобы разобраться в тонкостях.

🔗 Читать статью
🔗 Зеркало
👍5🤩1
🎯 Секреты инициализации программ

Думаете, функция main() в Go — это просто точка входа? Отложите скептицизм! В статье раскрывается целый пласт внутренних механизмов, которые происходят до первой строки вашего кода.

🔍 Вас ждет глубокое погружение в процессы, которые обычно остаются за кадром:
Порядок инициализации пакетов
🛠️Как Go гарантирует правильную последовательность подготовки
🛠️ Механизм работы функций init()
🛠️ Хитрости импорта пакетов

Тонкости работы с ресурсами
Безопасная инициализация общих ресурсов
Использование sync.Once
Предотвращение гонок при старте программы

Управление жизненным циклом программы
🔧 Завершение выполнения через os.Exit()
🔧 Обработка горутин
🔧 Что происходит при панике во время инициализации
👍8
🚀 Архитектура RESTful API на Go с использованием Gin, GORM и PostgreSQL

Если ты работаешь с микросервисами или хочешь оценить подходы разработки API на Go, стоит обратить внимание на статью. Автор предлагает современное решение с упором на производительность и простоту, которое можно адаптировать под реальные проекты.

👨‍💻Стек технологий:
Gin: высокопроизводительный HTTP-фреймворк, подходящий для микросервисов благодаря своей минималистичной архитектуре.
GORM: ORM с богатым функционалом, включая миграции, транзакции, ассоциации и поддержку различных баз данных.
PostgreSQL: одна из самых мощных и масштабируемых реляционных СУБД.

💡 Что вы узнаете:
Демонстрируется как разделить бизнес-логику, маршруты и работу с базой данных.
Рассматривается использование моделей в GORM и тонкости работы с миграциями.
API легко расширяется и интегрируется в существующую микросервисную архитектуру.
Возможность адаптировать пример под реальный production-ready код.
🥱12👍84👾1
🦫 Самоучитель по Go для начинающих. Часть 18. Протокол HTTP. Создание HTTP-сервера и клиента. Пакет net/http

Погружаемся в мир сетевых технологий с Go! В этой части самоучителя рассматриваются основы работы с HTTP в Go: устройство HTTP-запросов и ответов, ключевые способы взаимодействия клиента и сервера. Также подробно разбираются возможности пакета net/http, включая отправку запросов, обработку ответов и настройку параметров HTTP-сервера для веб-приложений.

📎 Читать новую часть самоучителя

👩‍💻 Остальные части в серии:
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 подход. Параллельные тесты
17. Основы сетевого программирования. Стек TCP/IP. Сокеты. Пакет net
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🥱21
3 Go-проекта для начинающих DevOps-инженеров!

Автор статьи представляет три практических проекта на Go, которые помогут начинающим разработчикам получить навыки программирования в DevOps.

🤩 Проекты
1. Мониторинг использования дисков
Программа на Go для анализа использования дискового пространства. Ключевые возможности:
Расчет общего, свободного и занятого места
Вычисление процента использования диска
Поддержка мониторинга любого указанного пути

2. HTTP-сервер для портфолио
Веб-сервер для размещения статического сайта-портфолио. Особенности:
Раздача статических файлов
Эндпоинт Healthcheck для мониторинга
Простой способ хостинга личной страницы

3. RESTful API для управления DevOps-инструментами
API для работы со списком DevOps-утилит. Функционал:
Список инструментов
Добавление новых инструментов
Получение детальной информации
Потокобезопасное управление данными

📎 Подробнее в источнике
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😍3❤‍🔥2🔥2
🚀 Go Protobuf: Новый Opaque API для оптимизации и гибкости

Команда Go представила новый Opaque API для Protocol Buffers, который решает ключевые проблемы старого подхода.

Что изменилось?
Раньше в Protobuf структурах можно было напрямую обращаться к полям, что делало оптимизацию и развитие библиотеки сложным. Новый API скрывает детали реализации и предоставляет методы вроде Get, Set, и Clear. Это позволяет:
Сократить потребление памяти — благодаря использованию битовых флагов вместо указателей.
Улучшить производительность — оптимизация работы сборщика мусора и аллокаций.
Сделать код безопаснее и гибче — структура теперь скрыта, что позволяет вносить изменения без риска для пользователей.

🎯 Пример:
Старый API. Вместо прямого доступа к структурам:
req.BackendServer = proto.String(«server1»)

Новый Opaque API использует методы:
req.SetBackendServer(«server1»)
🔥23👍422
🌐 Как работает GraphQL и чем он лучше RESTful API

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

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

👉 Читать по этой ссылке
👍62🥱2🥰1
🚀 WebSocket в GoFrame: Практическое руководство по real-time коммуникациям

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

Руководство раскрывает ключевые аспекты создания WebSocket-соединений: от построения сервера и управления параллельными подключениями до реализации механизма heartbeat для непрерывной проверки состояния соединения.
Особое внимание уделено безопасной работе с пулом подключений, что критично для производительных real-time систем.

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

#новость
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Forwarded from Библиотека программиста | программирование, кодинг, разработка
👑🧟 Король спама: насколько сильно ты бесишь коллег в рабочих чатах

Признайся, ты тоже иногда отправляешь голосовые сообщения из маршрутки? Или может быть, ты тот самый человек, который пишет «Привет» и исчезает на час? Всего 10 вопросов, которые помогут понять, являешься ли ты мастером цифрового этикета или главным спамером офиса. Готов узнать правду?

👉 Пройти тест
🔥1👾1
Вакансии «Библиотеки программиста» — ждем вас в команде!

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

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
👾1
🚀 Машинное обучение на Go без Python?

Python давно стал стандартом в ML благодаря библиотекам вроде TensorFlow и PyTorch. Но у него есть минусы: зависимость от интерпретатора и низкая производительность.

В статье Эли Бендерски рассказывает, как библиотека GoMLX меняет подход к ML, предоставляя возможность создавать и запускать модели на Go, исключая Python.

🔍 Что такое GoMLX?
GoMLX — библиотека для машинного обучения, использующая инфраструктуру OpenXLA. Она позволяет:
Проектировать нейронные сети на Go.
Оптимизировать выполнение на CPU, GPU и TPU.
Избежать зависимостей от Python, что упрощает деплой и повышает производительность.

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

#новость
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🤔43🔥2👾1
🔑 Безопасно передаём данные с Go

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

🔒 Что такое Go Crypto?
crypto — это стандартный пакет Go, который включает множество инструментов для работы с криптографией:

Хэширование: поддерживаются алгоритмы вроде SHA-256, SHA-512 и других.
Шифрование: предоставляются механизмы для работы с симметричными (AES) и асимметричными (RSA, ECC) алгоритмами.
Цифровые подписи: есть встроенная поддержка создания и проверки подписей.
Работа с ключами: генерация, хранение и преобразование ключей.

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

import (
"crypto/sha256"
"fmt"
)

func main() {
data := []byte("Hello, World!")
hash := sha256.Sum256(data)
fmt.Printf("SHA-256: %x\n", hash)
}


👍 Лучшие практики
Используйте случайные данные (например, через crypto/rand) для генерации ключей и инициализационных векторов.
Предпочитайте современные алгоритмы: например, AES-GCM вместо старых режимов шифрования (CBC).
Всегда проверяйте ошибки, особенно при работе с криптографией, так как они могут указывать на проблемы с входными данными или ключами.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11😢1👾1
Новый год — время для новых начинаний!
Пока все строят планы на будущее, подумайте, что поможет вам двигаться вперёд в карьере. Мы знаем, что навыки в IT открывают огромные возможности — и мы готовы помочь вам начать!

🔹 Почему IT?

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

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

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

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

А для тех, кто решит сделать шаг в будущее до конца года, у нас есть кое-что особенное… 🎁 Узнайте больше

Как выбрать свой путь?
Мы предлагаем несколько уникальных комбинаций курсов, которые помогут вам стать настоящим экспертом:

🔵 Математика для Data Science + Алгоритмы и структуры данных — для тех, кто хочет готовиться к собеседованиям в топовые компании.

🔵 Алгоритмы + ML — чтобы не просто решать задачи, а понимать, как работают современные технологии.

🔵 Frontend + ML — создавайте приложения и учитесь работать с нейросетями.

🔵 И другие комбинации для разных целей.

Новогодний подарок, который будет работать на вас весь год — это отличная идея! 🎁 Начните сейчас

Развивайтесь в IT — и будущее уже будет в ваших руках!
👍2👾1
🔐 О хеш-функциях в Go: как и зачем их использовать

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

🧩 Что такое хеш-функции?
Хеш-функция берёт входные данные произвольной длины и преобразует их в фиксированную строку байтов.

✏️Примеры задач, где применяются хеш-функции:
1. Проверка целостности данных.
2. Хеширование паролей.
3. Создание цифровых подписей.
4. Построение структур данных (например, хеш-таблиц).

⚙️ Как использовать хеш-функции в Go?
Go предоставляет удобный пакет crypto с различными реализациями хеш-функций. Вот примеры:
package main

import (
"crypto/sha256"
"fmt"
)

func main() {
data := []byte("Пример пароля от библиотеки программиста")
hash := sha256.Sum256(data)
fmt.Printf("SHA-256: %x\n", hash)
}

💡 Вывод: строка хеша длиной 64 символа в 16-ричном формате.

package main

import (
"fmt"
"golang.org/x/crypto/bcrypt"
)

func main() {
password := "my_secure_password"
hash, _ := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
fmt.Printf("Хеш пароля: %s\n", hash)
}

💡 Вывод: уникальный bcrypt-хеш пароля, начинающийся с "$2a$", который включает случайную соль и результат хеширования.

🔍 Хеш-функции в Go

1️⃣ SHA-256 и SHA-224
Надёжные и широко используемые.
Подходят для большинства задач, связанных с безопасностью.
Пакет: crypto/sha256.

2️⃣ SHA-512 и SHA-384
Дают более длинные хеши, что увеличивает защиту.
Пакет: crypto/sha512.

3️⃣ SHA-3 (Keccak)
Современная альтернатива SHA-2.
Более устойчива к некоторым видам атак.
Пакет: golang.org/x/crypto/sha3.

4️⃣ MD5
НЕ рекомендуется использовать для безопасности.
Подходит для задач без требований криптографической стойкости (например, проверки файлов).
Пакет: crypto/md5.

5️⃣ BLAKE2
Быстрая и надёжная альтернатива SHA-2.
Пакет: golang.org/x/crypto/blake2b.

Хеш-функции в Go — это мощный и простой инструмент, который подойдёт для множества задач. Главное — понимать их особенности и ограничения, чтобы использовать их безопасно и эффективно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍171👾1
⭐️ Фишки Go: раскрываем секреты мастерства разработки

1️⃣ Срезы для работы со строками
Работать со строками в Go — это искусство. Вместо создания новых копий, используйте срезы. Это не только экономит память, но и ускоряет обработку. Пример:

str := "Hello, Go!"
slice := str[0:5] // "Hello"

Вы не создаёте новую строку, а просто указываете, какой кусок использовать.

2️⃣ Композиция вместо наследования
Go не использует классическое наследование, но предлагает мощный инструмент — встраивание структур. Вы можете включить одну структуру в другую, чтобы разделить ответственность и переиспользовать код:
type Animal struct {
Name string
}

func (a Animal) Speak() string {
return "I am " + a.Name
}

type Dog struct {
Animal
}

func main() {
d := Dog{Animal{Name: "Buddy"}}
fmt.Println(d.Speak()) // I am Buddy
}


💡 Хотите узнать ещё больше скрытых фишек? Загляните в статью и узнайте другие трюки, чтобы писать ещё лучше.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥6🥱4🌚3👾1
А вы правильно обрабатываете ошибки?

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

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

Что в статье:
⚙️ Глубокое понимание типов ошибок: как отличить ожидаемую ошибку от критической и обрабатывать их по-разному.
⚙️ Лучшие практики Go: использование errors.Is и errors.As для четкой проверки и понимания контекста.
⚙️ Практические примеры: простые, но мощные способы улучшить читаемость и устойчивость кода.

📎 Если вдруг у вас не открывается источник, то воспользуйтесь зеркалом
👍81👾1
🛠️ Новые функции для работы с коллекциями в 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