❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
👾1
🚀 Машинное обучение на Go без Python?
Python давно стал стандартом в ML благодаря библиотекам вроде TensorFlow и PyTorch. Но у него есть минусы: зависимость от интерпретатора и низкая производительность.
В статье Эли Бендерски рассказывает, как библиотека GoMLX меняет подход к ML, предоставляя возможность создавать и запускать модели на Go, исключая Python.
🔍 Что такое GoMLX?
GoMLX — библиотека для машинного обучения, использующая инфраструктуру OpenXLA. Она позволяет:
✨ Проектировать нейронные сети на Go.
✨ Оптимизировать выполнение на CPU, GPU и TPU.
✨ Избежать зависимостей от Python, что упрощает деплой и повышает производительность.
Статья демонстрирует, как реализовать сверточную нейронную сеть для обработки изображений, полностью используя Go. Модель описывается, обучается и тестируется в одной среде без внешних интерпретаторов.
#новость
Python давно стал стандартом в ML благодаря библиотекам вроде TensorFlow и PyTorch. Но у него есть минусы: зависимость от интерпретатора и низкая производительность.
В статье Эли Бендерски рассказывает, как библиотека GoMLX меняет подход к ML, предоставляя возможность создавать и запускать модели на Go, исключая Python.
🔍 Что такое GoMLX?
GoMLX — библиотека для машинного обучения, использующая инфраструктуру OpenXLA. Она позволяет:
Статья демонстрирует, как реализовать сверточную нейронную сеть для обработки изображений, полностью используя Go. Модель описывается, обучается и тестируется в одной среде без внешних интерпретаторов.
#новость
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🤔4❤3🔥2👾1
🔑 Безопасно передаём данные с Go
Безопасность данных — одна из ключевых задач современного программирования. И если вы разрабатываете приложения на Go, то пакет crypto предоставляет мощный набор инструментов для шифрования, хэширования, создания цифровых подписей и других криптографических операций.
🔒 Что такое Go Crypto?
crypto — это стандартный пакет Go, который включает множество инструментов для работы с криптографией:
➖ Хэширование: поддерживаются алгоритмы вроде SHA-256, SHA-512 и других.
➖ Шифрование: предоставляются механизмы для работы с симметричными (AES) и асимметричными (RSA, ECC) алгоритмами.
➖ Цифровые подписи: есть встроенная поддержка создания и проверки подписей.
➖ Работа с ключами: генерация, хранение и преобразование ключей.
🚀 Пример использования
👍 Лучшие практики
➖ Используйте случайные данные (например, через crypto/rand) для генерации ключей и инициализационных векторов.
➖ Предпочитайте современные алгоритмы: например, AES-GCM вместо старых режимов шифрования (CBC).
➖ Всегда проверяйте ошибки, особенно при работе с криптографией, так как они могут указывать на проблемы с входными данными или ключами.
Безопасность данных — одна из ключевых задач современного программирования. И если вы разрабатываете приложения на Go, то пакет crypto предоставляет мощный набор инструментов для шифрования, хэширования, создания цифровых подписей и других криптографических операций.
crypto — это стандартный пакет Go, который включает множество инструментов для работы с криптографией:
🚀 Пример использования
package main
import (
"crypto/sha256"
"fmt"
)
func main() {
data := []byte("Hello, World!")
hash := sha256.Sum256(data)
fmt.Printf("SHA-256: %x\n", hash)
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11😢1👾1
Новый год — время для новых начинаний!
Пока все строят планы на будущее, подумайте, что поможет вам двигаться вперёд в карьере. Мы знаем, что навыки в IT открывают огромные возможности — и мы готовы помочь вам начать!
🔹 Почему IT?
- Большинство компаний активно ищут специалистов.
- Вы можете работать из любой точки мира — с гибким графиком и интересными задачами.
- А ещё IT — это высокий доход и стремительный карьерный рост.
Возможно, именно сейчас тот момент, когда стоит инвестировать в себя и развить востребованные навыки. У нас есть конструктор курсов, с помощью которого вы сможете составить свой идеальный план обучения — под свои цели и интересы.
📚 Как это работает?
- Несколько программ по цене одной — выбирайте всё, что вам нужно.
- Бессрочный доступ — учитесь в своём ритме и когда удобно.
- Это выгодно — вы получаете навыки, которые помогут вам расти профессионально и зарабатывать больше.
А для тех, кто решит сделать шаг в будущее до конца года, у нас есть кое-что особенное… 🎁 Узнайте больше
Как выбрать свой путь?
Мы предлагаем несколько уникальных комбинаций курсов, которые помогут вам стать настоящим экспертом:
🔵 Математика для Data Science + Алгоритмы и структуры данных — для тех, кто хочет готовиться к собеседованиям в топовые компании.
🔵 Алгоритмы + ML — чтобы не просто решать задачи, а понимать, как работают современные технологии.
🔵 Frontend + ML — создавайте приложения и учитесь работать с нейросетями.
🔵 И другие комбинации для разных целей.
Новогодний подарок, который будет работать на вас весь год — это отличная идея! 🎁 Начните сейчас
Развивайтесь в IT — и будущее уже будет в ваших руках!
Пока все строят планы на будущее, подумайте, что поможет вам двигаться вперёд в карьере. Мы знаем, что навыки в IT открывают огромные возможности — и мы готовы помочь вам начать!
🔹 Почему IT?
- Большинство компаний активно ищут специалистов.
- Вы можете работать из любой точки мира — с гибким графиком и интересными задачами.
- А ещё IT — это высокий доход и стремительный карьерный рост.
Возможно, именно сейчас тот момент, когда стоит инвестировать в себя и развить востребованные навыки. У нас есть конструктор курсов, с помощью которого вы сможете составить свой идеальный план обучения — под свои цели и интересы.
📚 Как это работает?
- Несколько программ по цене одной — выбирайте всё, что вам нужно.
- Бессрочный доступ — учитесь в своём ритме и когда удобно.
- Это выгодно — вы получаете навыки, которые помогут вам расти профессионально и зарабатывать больше.
А для тех, кто решит сделать шаг в будущее до конца года, у нас есть кое-что особенное… 🎁 Узнайте больше
Как выбрать свой путь?
Мы предлагаем несколько уникальных комбинаций курсов, которые помогут вам стать настоящим экспертом:
🔵 Математика для Data Science + Алгоритмы и структуры данных — для тех, кто хочет готовиться к собеседованиям в топовые компании.
🔵 Алгоритмы + ML — чтобы не просто решать задачи, а понимать, как работают современные технологии.
🔵 Frontend + ML — создавайте приложения и учитесь работать с нейросетями.
🔵 И другие комбинации для разных целей.
Новогодний подарок, который будет работать на вас весь год — это отличная идея! 🎁 Начните сейчас
Развивайтесь в IT — и будущее уже будет в ваших руках!
👍2👾1
🔐 О хеш-функциях в Go: как и зачем их использовать
Хеш-функции — это фундаментальный инструмент криптографии, который используется для создания уникальных "отпечатков" данных. В языке Go работа с хеш-функциями проста и интуитивно понятна благодаря стандартной библиотеке. Давайте разберёмся, как это работает и где можно применить.
🧩 Что такое хеш-функции?
Хеш-функция берёт входные данные произвольной длины и преобразует их в фиксированную строку байтов.
✏️ Примеры задач, где применяются хеш-функции:
1. Проверка целостности данных.
2. Хеширование паролей.
3. Создание цифровых подписей.
4. Построение структур данных (например, хеш-таблиц).
⚙️ Как использовать хеш-функции в Go?
Go предоставляет удобный пакет crypto с различными реализациями хеш-функций. Вот примеры:
💡 Вывод: строка хеша длиной 64 символа в 16-ричном формате.
💡 Вывод: уникальный 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 — это мощный и простой инструмент, который подойдёт для множества задач. Главное — понимать их особенности и ограничения, чтобы использовать их безопасно и эффективно.
Хеш-функции — это фундаментальный инструмент криптографии, который используется для создания уникальных "отпечатков" данных. В языке 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)
}
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)
}
🔍 Хеш-функции в Go
Надёжные и широко используемые.
Подходят для большинства задач, связанных с безопасностью.
Пакет: crypto/sha256.
Дают более длинные хеши, что увеличивает защиту.
Пакет: crypto/sha512.
Современная альтернатива SHA-2.
Более устойчива к некоторым видам атак.
Пакет: golang.org/x/crypto/sha3.
❌ НЕ рекомендуется использовать для безопасности.
Подходит для задач без требований криптографической стойкости (например, проверки файлов).
Пакет: crypto/md5.
Быстрая и надёжная альтернатива SHA-2.
Пакет: golang.org/x/crypto/blake2b.
Хеш-функции в Go — это мощный и простой инструмент, который подойдёт для множества задач. Главное — понимать их особенности и ограничения, чтобы использовать их безопасно и эффективно.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤1👾1
Работать со строками в Go — это искусство. Вместо создания новых копий, используйте срезы. Это не только экономит память, но и ускоряет обработку. Пример:
str := "Hello, Go!"
slice := str[0:5] // "Hello"
Вы не создаёте новую строку, а просто указываете, какой кусок использовать.
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 для четкой проверки и понимания контекста.
⚙️ Практические примеры: простые, но мощные способы улучшить читаемость и устойчивость кода.
📎 Если вдруг у вас не открывается источник, то воспользуйтесь зеркалом
Ошибки в Go — это не просто часть кода, а важный инструмент для создания надежных приложений. В статье автор делится мощными советами, которые помогут вывести обработку ошибок на новый уровень.
Почему это важно? Ошибки — это сигнал, что что-то пошло не так. Но чтобы этот сигнал был полезным, его нужно уметь правильно интерпретировать. Многие разработчики ограничиваются базовой проверкой, не задумываясь о типах ошибок и их природе. Результат? Ускользающие баги, трудности в поддержке и фрустрация.
Что в статье:
⚙️ Глубокое понимание типов ошибок: как отличить ожидаемую ошибку от критической и обрабатывать их по-разному.
⚙️ Лучшие практики Go: использование errors.Is и errors.As для четкой проверки и понимания контекста.
⚙️ Практические примеры: простые, но мощные способы улучшить читаемость и устойчивость кода.
📎 Если вдруг у вас не открывается источник, то воспользуйтесь зеркалом
👍8❤1👾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() облегчает объединение нескольких слайсов в один.
#новость
В версии 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. Отличный выбор для прототипов и приложений средней нагрузки.
Выбираете между Python FastAPI и Go (Golang) для разработки веб-приложений? Это видео разбирает их производительность и помогает определиться с выбором технологии. Вот ключевые моменты теста! 👇
Что тестировали?
🏁Результаты
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 и другие), их отличия и подходящие случаи использования.
🎛️ Настройка логгера: рассматриваются инструменты для изменения формата сообщений, добавление префиксов, а также перенаправление логов, например, в файл.
🚀 Пользовательские логгеры: описывается создание собственных логгеров для более гибкой работы с потоками вывода и форматирования.
Логирование — одна из важнейших частей разработки, которая помогает отслеживать поведение приложений, анализировать ошибки и оптимизировать производительность. В языке Go для этих целей существует стандартный пакет log, предоставляющий базовые инструменты для работы с логами.
В одной из недавних статей этот пакет рассматривается детально: начиная от стандартных возможностей и заканчивая кастомизацией логгеров для более сложных задач. Вот основные моменты:
📋 Методы логгирования: разбираются основные методы (Print, Printf, Panic, Fatal и другие), их отличия и подходящие случаи использования.
🎛️ Настройка логгера: рассматриваются инструменты для изменения формата сообщений, добавление префиксов, а также перенаправление логов, например, в файл.
🚀 Пользовательские логгеры: описывается создание собственных логгеров для более гибкой работы с потоками вывода и форматирования.
👍9🤩3🥱3❤🔥1❤1
На этот раз в центре внимания видео — облачные технологии: Kubernetes, OpenTelemetry, Prometheus, Postgres и S3. Оба языка протестированы в условиях микросервисной архитектуры.
Go:
💪 Устойчивость под нагрузкой.
Python:
🚀 Быстрый старт и удобство разработки.
🐢 Уступает Go в скорости при высоких нагрузках.
Go побеждает на длинных дистанциях, Python выигрывает на коротких. Выбор за вами! 👊
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱27👍12❤3😁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 спроектирован для работы в многопоточных средах, что делает его идеальным выбором для высоконагруженных приложений.
Если вы ищете инструмент, который упрощает работу с базами данных и обеспечивает высокую производительность, познакомьтесь с Korm! Это ORM для Go, вдохновленный Django, но с акцентом на простоту, скорость и современные подходы к разработке.
🔑 Особенности Korm:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍9❤1😁1🤔1
🔄 Итераторы для пагинации API на Go: эффективная обработка данных
Работа с постраничными API — задача, знакомая каждому, кто пишет на Go. Но вместо того, чтобы тратить время на ручное управление запросами и ответами, можно использовать мощные инструменты стандартной библиотеки Go 1.23.
Итераторы — это способ автоматизировать пагинацию, делая код читаемым и гибким. С итератором вы сможете:
🚀 Обрабатывать данные без лишнего кода: забудьте о ручной обработке страниц, переключениях и урлах.
🔧 Упростить тестирование: используйте мок-объекты для проверки функциональности итератора без реального API.
🛠️ Повысить читаемость и масштабируемость кода: пишите лаконичные и удобные решения для сложных задач.
Если работа с REST API и пагинацией — часть ваших задач, итераторы могут стать тем инструментом, который вы давно искали. Время писать и тестировать код так, чтобы он работал за вас!
Работа с постраничными API — задача, знакомая каждому, кто пишет на Go. Но вместо того, чтобы тратить время на ручное управление запросами и ответами, можно использовать мощные инструменты стандартной библиотеки Go 1.23.
Итераторы — это способ автоматизировать пагинацию, делая код читаемым и гибким. С итератором вы сможете:
🚀 Обрабатывать данные без лишнего кода: забудьте о ручной обработке страниц, переключениях и урлах.
🔧 Упростить тестирование: используйте мок-объекты для проверки функциональности итератора без реального API.
🛠️ Повысить читаемость и масштабируемость кода: пишите лаконичные и удобные решения для сложных задач.
Если работа с REST API и пагинацией — часть ваших задач, итераторы могут стать тем инструментом, который вы давно искали. Время писать и тестировать код так, чтобы он работал за вас!
👍10🤔3🥱3😢2
🔢 iota в Go: магия автоматических констант
❓ Что такое iota?
iota — это встроенный идентификатор в Go, используемый для генерации последовательных числовых значений внутри блока const. Он начинается с 0 и увеличивается на 1 в каждой новой строке.
💡 Когда iota полезен?
1️⃣ Для последовательных значений:
iota автоматически увеличивается на 1, что идеально для создания счётчиков или статусов.
2️⃣ Для битовых флагов:
Используя iota, можно легко генерировать битовые флаги:
3️⃣ Для вычислений:
iota можно использовать для создания сложных последовательностей. Например:
iota — это встроенный идентификатор в Go, используемый для генерации последовательных числовых значений внутри блока const. Он начинается с 0 и увеличивается на 1 в каждой новой строке.
go
const (
A = iota // 0
B // 1
C // 2
)
fmt.Println(A, B, C)
iota автоматически увеличивается на 1, что идеально для создания счётчиков или статусов.
Используя iota, можно легко генерировать битовые флаги:
const (
Read = 1 << iota // 1
Write // 2
Execute // 4
)
fmt.Println(Read, Write, Execute)
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
Курсы от Proglib Academy — это крутой подарок для тех, кто интересуется IT, хочет освоить новую профессию
Почему сертификат на наши курсы — хороший презент:
Сертификат оформляется за пару минут, и даже не нужно ломать голову над упаковкой.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6👍1
🔄 Timeouts в Go: Управление длительными задачами
В разработке на Go часто требуется ограничивать время выполнения задач, чтобы избежать зависаний или ненужной траты ресурсов. Таймауты помогают контролировать выполнение операций, обеспечивая стабильность и отзывчивость приложений.
🤔 Что такое таймаут?
Таймаут позволяет задать время, после которого задача будет прервана, если она не завершилась. Это особенно полезно в случае сетевых запросов, работы с базами данных или сложных вычислений, которые могут зависнуть.
🚀 Как реализовать таймауты в Go?
Go предлагает несколько удобных инструментов для работы с таймаутами. Вот несколько примеров:
1️⃣ Контексты с таймаутом
Контекст позволяет задавать ограничение по времени, которое автоматически завершит задачу при превышении лимита.
Зачем использовать?
Это гибкий способ контролировать выполнение задач с возможностью передать контекст в функции.
2️⃣ Таймауты с time.After
Функция time.After позволяет просто установить ограничение времени для выполнения задачи.
Когда использовать?
Когда нужен быстрый и простой способ контролировать длительные операции.
3️⃣ HTTP-запросы с таймаутом
Для работы с сетевыми запросами Go предоставляет возможность задавать таймаут на уровне HTTP-клиента.
Преимущество:
Контроль времени выполнения сетевых операций без дополнительных инструментов.
📌 Почему это важно?
Избежание зависаний: таймауты предотвращают блокировку программы.
Оптимизация ресурсов: долгие задачи прерываются, освобождая память и процессор.
Улучшение UX: пользователи быстрее получают обратную связь, даже если операция не удалась.
В разработке на Go часто требуется ограничивать время выполнения задач, чтобы избежать зависаний или ненужной траты ресурсов. Таймауты помогают контролировать выполнение операций, обеспечивая стабильность и отзывчивость приложений.
🤔 Что такое таймаут?
Таймаут позволяет задать время, после которого задача будет прервана, если она не завершилась. Это особенно полезно в случае сетевых запросов, работы с базами данных или сложных вычислений, которые могут зависнуть.
🚀 Как реализовать таймауты в Go?
Go предлагает несколько удобных инструментов для работы с таймаутами. Вот несколько примеров:
Контекст позволяет задавать ограничение по времени, которое автоматически завершит задачу при превышении лимита.
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())
}
Зачем использовать?
Это гибкий способ контролировать выполнение задач с возможностью передать контекст в функции.
Функция 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("Таймаут! Слишком долго")
}
Когда использовать?
Когда нужен быстрый и простой способ контролировать длительные операции.
Для работы с сетевыми запросами 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
👍16❤2
🦑👨💻 Программист в «Игре в кальмара»: каковы твои шансы выжить?
Каждый день укрощаете горутины и собираете микросервисы? 🔧
Проверьте, помогут ли вам Go-скилы и железная логика выжить в «Игре в кальмара»! Один panic без recover может стать фатальным 💀🦑
🎯 Пройти тест
Каждый день укрощаете горутины и собираете микросервисы? 🔧
Проверьте, помогут ли вам Go-скилы и железная логика выжить в «Игре в кальмара»! Один panic без recover может стать фатальным 💀🦑
🎯 Пройти тест
🥱8❤2👍2🌚1
Разработка веб-приложений на Go становится ещё проще с Gowebly — инструментом командной строки, который сочетает мощь Go и современные веб-технологии. Если вы хотите быстро создавать быстрые и удобные веб-приложения, этот инструмент вам точно пригодится!
🚀 Что такое Gowebly?
Gowebly — это CLI для генерации веб-приложений на Go с использованием популярных фреймворков (Fiber, Gin, Echo и других) и интеграции с современными библиотеками для интерфейса, такими как htmx, hyperscript, Alpine.js и CSS-фреймворками (Tailwind CSS, Bootstrap и др.).
🔑 Ключевые возможности
Генерация проектов с Fiber, Gin, Echo, Chi и другими фреймворками.
Быстрая интеграция с htmx, Alpine.js и другими инструментами для создания динамических пользовательских интерфейсов.
Tailwind CSS, Bootstrap, UnoCSS — выбирайте то, что подходит вашему проекту.
Горячая перезагрузка шаблонов позволяет ускорить процесс разработки.
Создавайте прогрессивные веб-приложения, готовые к установке на устройства.
Работает на 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 перестает быть реализованным:
Такой код работает для базовой обработки, но если клиент рассчитывает на интерфейс http.Flusher (например, для Server-Sent Events), он больше не доступен. SSE не будут работать корректно.
💡 Решение проблемы
Чтобы восстановить функциональность, автор явно реализовал недостающие методы в композируемой структуре. Например, был добавлен метод Flush в кастомный объект.
Композиция — одна из ключевых особенностей Go, позволяющая строить гибкие и переиспользуемые компоненты. Однако сочетание композиции с неявными интерфейсами может привести к неожиданным проблемам. В статье описывается реальная ситуация, где композиция поверх http.ResponseWriter нарушила работу Server-Sent Events (SSE).
Что произошло?
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
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍3