Библиотека 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
Вакансии «Библиотеки программиста» — ждем вас в команде!

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

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

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

Ждем ваших откликов 👾
👾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
🔥 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