⚡️ Если вы вдруг забыли: у нас можно купить рекламу
Библиотека программиста — медиа с миллионной аудиторией из IT-сферы. Что у нас есть:
• 60+ телеграм-каналов по разным IT-направлениям, от Python до DevOps
• 25 000 daily active users на сайте, который поможет усилить продвижение
• Возможность сделать нативную интеграцию, виральный пост и не только
За айтишной аудиторией — к нам 😏
По вопросам рекламы пишите сюда → @proglib_adv
Библиотека программиста — медиа с миллионной аудиторией из IT-сферы. Что у нас есть:
• 60+ телеграм-каналов по разным IT-направлениям, от Python до DevOps
• 25 000 daily active users на сайте, который поможет усилить продвижение
• Возможность сделать нативную интеграцию, виральный пост и не только
За айтишной аудиторией — к нам 😏
По вопросам рекламы пишите сюда → @proglib_adv
🥱9👍1
Сервис сокращения URL — отличный способ улучшить навыки веб-разработки и работы с Go. В этом проекте используется база данных Redis и контейнеризация с помощью Docker.
Этапы разработки:
🖇 Подробное описание каждого этапа в источнике.
Или можно посмотреть исходный код на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱18👍12🤔2
☢️ Как не попасть в токсичную компанию: чек-лист для айтишника
C офферами от Сбера, Вконтакте, Яндекса и других айтишных гигантов все понятно — это стабильные компании, работать в которых мечтают многие.
Но вот что делать, если вас зовут работать в ноунейм-компанию, при этом предлагают з/п сильно выше рынка, полную удаленку и 100500 «плюшек»?
Рассказываем, как проверить будущего работодателя и не оказаться в компании-однодневке с невыплатами зарплаты и токсичной культурой.
👉 Читать статью
C офферами от Сбера, Вконтакте, Яндекса и других айтишных гигантов все понятно — это стабильные компании, работать в которых мечтают многие.
Но вот что делать, если вас зовут работать в ноунейм-компанию, при этом предлагают з/п сильно выше рынка, полную удаленку и 100500 «плюшек»?
Рассказываем, как проверить будущего работодателя и не оказаться в компании-однодневке с невыплатами зарплаты и токсичной культурой.
👉 Читать статью
😁3👍1
Библиотека Zap, разработанная компанией Uber, предоставляет высокопроизводительное структурированное логирование с поддержкой различных уровней логов.
• zap.NewProduction(): выводит логи в формате JSON с минимальным уровнем Info.
• zap.NewDevelopment(): выводит логи в удобочитаемом формате с минимальным уровнем Debug.
• zap.NewExample(): имеет настройки, схожие с zap.NewDevelopment().
• Debug: подробные сообщения для отладки.
• Info: информационные сообщения о нормальной работе приложения.
• Warn: предупреждения о проблемах, не требующие немедленного вмешательства.
• Error: сообщения об ошибках, которые требуют внимания, но не приводят к остановке приложения.
• DPanic: ошибки, которые вызывают панику в режиме разработки; в продакшене записываются как ошибки.
• Panic: запись сообщения и вызов паники, приводящей к остановке программы.
• Fatal: запись сообщения и завершение программы с кодом выхода 1.
Пример использования Zap:
package main
import (
"go.uber.org/zap"
)
func main() {
// Создание логгера с настройками для разработки
logger, _ := zap.NewDevelopment()
defer logger.Sync() // Очистка буферов перед завершением
// Запись различных уровней логов
logger.Debug("Это сообщение уровня DEBUG")
logger.Info("Это сообщение уровня INFO")
logger.Warn("Это сообщение уровня WARN")
logger.Error("Это сообщение уровня ERROR")
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱20👍16❤2
Forwarded from Книги для программистов
📚 ТОП-11 книг по базам данных в 2025 году
Хотите разобраться в базах данных, но не знаете, с чего начать? Мы подготовили подборку из 11 лучших книг, которые помогут вам освоить раздичные базы данных, паттерны и антипаттерны, а также оптимизацию запросов.
🔗 Читайте в статье
Хотите разобраться в базах данных, но не знаете, с чего начать? Мы подготовили подборку из 11 лучших книг, которые помогут вам освоить раздичные базы данных, паттерны и антипаттерны, а также оптимизацию запросов.
🔗 Читайте в статье
👍8🥱4
🌐 Современный подход к работе с IP
Пакет net/netip – современное решение для работы с IP-адресами в Go. Он заменяет устаревший тип net.IP и предлагает компактные, неизменяемые и безопасные структуры для работы с IPv4 и IPv6
Основные типы и функции:
•
Этот тип представляет IP-адрес и поддерживает как IPv4, так и IPv6. Методы типа позволяют проверить, к какому семейству адресов относится IP или определить его особенности, такие как принадлежность к loopback или multicast группам.
•
Используется для описания комбинации IP-адреса и сетевой маски.
•
Пакет включает функции для преобразования строкового представления адресов и префиксов в объекты нужных типов.
📎 Документация по пакету
🐸 Библиотека Go разработчика
Пакет net/netip – современное решение для работы с IP-адресами в Go. Он заменяет устаревший тип net.IP и предлагает компактные, неизменяемые и безопасные структуры для работы с IPv4 и IPv6
Основные типы и функции:
•
netip.Addr
Этот тип представляет IP-адрес и поддерживает как IPv4, так и IPv6. Методы типа позволяют проверить, к какому семейству адресов относится IP или определить его особенности, такие как принадлежность к loopback или multicast группам.
•
netip.Prefix
Используется для описания комбинации IP-адреса и сетевой маски.
•
ParseAddr
и ParsePrefix
Пакет включает функции для преобразования строкового представления адресов и префиксов в объекты нужных типов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🥱3❤2
🧑💻 Shell-скрипты на Go
Библиотека script позволяет загружать и обрабатывать содержимое файлов, запускать внешние программы и анализировать их вывод, а также фильтровать текст – искать строки по шаблонам, заменять текст и сортировать данные.
С её помощью можно работать с HTTP-запросами, обрабатывать веб-страницы и структурированные данные.
✏️ Примеры:
Запуск команды и анализ вывода
Чтение файла и фильтрация строк
Работа с HTTP-запросами
🐸 Библиотека Go разработчика
Библиотека script позволяет загружать и обрабатывать содержимое файлов, запускать внешние программы и анализировать их вывод, а также фильтровать текст – искать строки по шаблонам, заменять текст и сортировать данные.
С её помощью можно работать с HTTP-запросами, обрабатывать веб-страницы и структурированные данные.
Запуск команды и анализ вывода
count, err := script.Exec("ps aux").Match("nginx").CountLines()
if err != nil {
fmt.Println("Ошибка:", err)
return
}
fmt.Printf("Запущено %d процессов nginx\n", count)
Чтение файла и фильтрация строк
count, err := script.File("server.log").Match("ERROR").CountLines()
if err != nil {
fmt.Println("Ошибка:", err)
return
}
fmt.Printf("Найдено %d строк с ошибками\n", count)
Работа с HTTP-запросами
script.Get("https://golang.org").
Match("Go").
Stdout()
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🤔4❤1
🛠 Минимум аллокаций в Go
Zero-Allocation в Go — это мощный «инструмент», который помогает снизить нагрузку на GC и улучшить производительность
1️⃣ Используйте
• Конкатенация + создает новую строку в куче.
• strings.Builder позволяет избежать лишних аллокаций.
2️⃣ Предварительно задавайте емкость срезов
• append() расширяет массив и выделяет новую память.
• Если емкость известна заранее, лучше использовать make.
3️⃣ Используйте
• copy копирует данные без создания новых объектов.
4️⃣ Не передавайте указатели, если объект помещается в стек
• Переменные, переданные по указателю, могут уйти в кучу из-за escape-анализа.
5️⃣ Используйте
Перед оптимизацией профилируйте код, чтобы понять, где реально нужны улучшения
➡️ Примеры для каждого приема в статье
🐸 Библиотека Go разработчика
Zero-Allocation в Go — это мощный «инструмент», который помогает снизить нагрузку на GC и улучшить производительность
strings.Builder
вместо «+» для строк• Конкатенация + создает новую строку в куче.
• strings.Builder позволяет избежать лишних аллокаций.
(make([]T, 0, cap))
• append() расширяет массив и выделяет новую память.
• Если емкость известна заранее, лучше использовать make.
copy()
вместо append()
для дубликатов срезов• copy копирует данные без создания новых объектов.
• Переменные, переданные по указателю, могут уйти в кучу из-за escape-анализа.
sync.Pool
для повторного использования объектовПеред оптимизацией профилируйте код, чтобы понять, где реально нужны улучшения
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27😢10🥱5🔥3👾2
🛠 Проблема зависания Go-приложений в Steam
Если вы создаёте приложения на Go и запускаете их через Steam, например, игры, то можете столкнуться с неожиданной проблемой — программа зависает без очевидных причин.
Эта ошибка затрагивает даже простые консольные приложения и связана с конфликтом между Steam Overlay и рантаймом Go.
Всё указывает на то, что gameoverlayrenderer64.dll, отвечающая за наложение Steam Overlay, конфликтует с механизмом асинхронной предвыборки в Go.
➖ Как исправить
Чтобы обойти этот баг, можно отключить асинхронную предвыборку при компиляции Go-приложения. Добавьте следующий флаг в команду сборки:
Это позволит избежать зависания, но может повлиять на производительность приложения, так как отключается часть оптимизаций управления потоками.
Эта проблема уже обсуждается в сообществе Go-разработчиков, и можно ожидать её решения в будущих релизах.
➡️ Обсуждение проблемы в Steam и GitHub
🐸 Библиотека Go разработчика
Если вы создаёте приложения на Go и запускаете их через Steam, например, игры, то можете столкнуться с неожиданной проблемой — программа зависает без очевидных причин.
Эта ошибка затрагивает даже простые консольные приложения и связана с конфликтом между Steam Overlay и рантаймом Go.
Всё указывает на то, что gameoverlayrenderer64.dll, отвечающая за наложение Steam Overlay, конфликтует с механизмом асинхронной предвыборки в Go.
Чтобы обойти этот баг, можно отключить асинхронную предвыборку при компиляции Go-приложения. Добавьте следующий флаг в команду сборки:
go build -ldflags="-X=runtime.godebugDefault=asyncpreemptoff=1"
Это позволит избежать зависания, но может повлиять на производительность приложения, так как отключается часть оптимизаций управления потоками.
Эта проблема уже обсуждается в сообществе Go-разработчиков, и можно ожидать её решения в будущих релизах.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍4🥱2👾1
🧑💻 Гибкое тестирование в Go
Ginkgo это BDD-фреймворк (Behavior-Driven Development), который упрощает написание структурированных и читаемых тестов.
В отличие от стандартного testing пакета, Ginkgo дает гибкую систему организации тестов, поддержку параллельного выполнения, мощные моки и матчеры, а также удобный вывод результатов.
Особенно полезен Ginkgo для юнит-тестов, интеграционного тестирования и TDD-подхода. Он активно используется в Kubernetes, где тестирование играет ключевую роль.
Пример использования фреймворка:
➡️ Документация проекта
🐸 Библиотека Go разработчика
Ginkgo это BDD-фреймворк (Behavior-Driven Development), который упрощает написание структурированных и читаемых тестов.
В отличие от стандартного testing пакета, Ginkgo дает гибкую систему организации тестов, поддержку параллельного выполнения, мощные моки и матчеры, а также удобный вывод результатов.
Особенно полезен Ginkgo для юнит-тестов, интеграционного тестирования и TDD-подхода. Он активно используется в Kubernetes, где тестирование играет ключевую роль.
Пример использования фреймворка:
func TestMain(t *testing.T) {
RunSpecs(t, "Main Suite")
}
var _ = Describe("Простая арифметика", func() {
Context("Операция сложения", func() {
It("должна правильно складывать числа", func() {
sum := 2 + 3
if sum != 5 {
Fail("Сумма 2 + 3 должна быть равна 5")
}
})
})
})
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🥱13😢5
🔢 Проблемы с float в Go
В Go, как и в других языках, float32 и float64 могут выдавать неожиданные результаты из-за особенностей их представления в памяти.
Числа хранятся в двоичной системе, что приводит к ошибкам округления. Например, простое сложение может дать неточный результат:
Нельзя просто так взять и сравнить два числа с плавающей запятой. Проверка a == b может неожиданно вернуть false, если числа рассчитаны в разное время или через разные выражения.
➡️ Как избежать проблем
• Использовать пакет Decimal
Вместо стандартных float-чисел можно применять пакет Decimal, который работает с точностью до нужного количества знаков.
• Сравнивать с учётом эпсилона
Когда сравниваете float-значения, лучше учитывать небольшую допустимую разницу:
• Переключаться на целые числа
Если возможно, стоит использовать int или хранить денежные значения в копейках (например, 100 рублей = 10000 копеек).
📎 Больше примеров в статье
🐸 Библиотека Go разработчика
В Go, как и в других языках, float32 и float64 могут выдавать неожиданные результаты из-за особенностей их представления в памяти.
Числа хранятся в двоичной системе, что приводит к ошибкам округления. Например, простое сложение может дать неточный результат:
fmt.Println(0.1 + 0.2) // 0.30000000000000004
Нельзя просто так взять и сравнить два числа с плавающей запятой. Проверка a == b может неожиданно вернуть false, если числа рассчитаны в разное время или через разные выражения.
• Использовать пакет Decimal
Вместо стандартных float-чисел можно применять пакет Decimal, который работает с точностью до нужного количества знаков.
• Сравнивать с учётом эпсилона
Когда сравниваете float-значения, лучше учитывать небольшую допустимую разницу:
const epsilon = 1e-9
if math.Abs(a-b) < epsilon {
fmt.Println("Числа равны")
}
• Переключаться на целые числа
Если возможно, стоит использовать int или хранить денежные значения в копейках (например, 100 рублей = 10000 копеек).
📎 Больше примеров в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱14👍10🌚1
Real-time batching — это стратегия обработки входящих данных, при которой вместо выполнения каждой операции по одной они накапливаются в батч и обрабатываются вместе через небольшие интервалы времени.
1️⃣ Сбор событий в буфер — вместо того чтобы сразу обрабатывать каждое событие, мы добавляем его в очередь или в канал.
2️⃣ Таймер или лимит батча — если прошло, например, 50 мс, или набралось 100 событий, запускается обработка.
3️⃣ Групповая обработка — все собранные события обрабатываются одним запросом к базе данных, API или другому ресурсу.
• Базы данных – массовые INSERT и UPDATE, минимизирующие нагрузку
• Очереди сообщений – накопление сообщений перед отправкой
• Логирование – запись логов блоками вместо построчной записи
• Аналитика – сбор событий перед отправкой в мониторинговую систему
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25❤1👾1
Google Spanner — это уникальная распределённая SQL-база данных, сочетающая масштабируемость NoSQL и согласованность реляционных БД.
Как обрабатываются триллионы строк
Где применяется
• Google Ads — миллиарды запросов в день
• Google Play — обработка глобальных транзакций
• YouTube — хранение и управление огромными объёмами данных
📎 Подробнее про Spanner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🎉1
Swipe right or swipe left
Что делать, если твои мэтчи в жизни не такие точные, как твой код?
Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.
📌 Мы возьмем реальные данные со speed dating.
📌 Обучим модель, которая скажет: match или swipe left.
📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).
💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.
👉 Записаться
Что делать, если твои мэтчи в жизни не такие точные, как твой код?
Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.
📌 Мы возьмем реальные данные со speed dating.
📌 Обучим модель, которая скажет: match или swipe left.
📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).
💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.
👉 Записаться
🤔6🌚2😁1
🛠 Декларативная валидация данных в Go
Zog – это библиотека, вдохновлённая Zod. Она позволяет гибко и декларативно проверять входные данные, минимизируя ручную обработку ошибок.
➖ Где пригодится
• Валидация JSON-запросов в API
• Проверка параметров HTTP-запросов
• Чтение и проверка переменных окружения
• Минимизация кода валидации и ошибок
Пример использования:
Создаём схему UserSchema, где username должен быть строкой длиной от 3 до 20 символов, email – валидным email-адресом, а age – числом не меньше 18. Передаём тестовый JSON и проверяем его с помощью UserSchema.Parse().
А как вы валидируете данные? Напишите в комментарии👇
🖇 Официальный репозиторий проекта
🐸 Библиотека Go разработчика
Zog – это библиотека, вдохновлённая Zod. Она позволяет гибко и декларативно проверять входные данные, минимизируя ручную обработку ошибок.
• Валидация JSON-запросов в API
• Проверка параметров HTTP-запросов
• Чтение и проверка переменных окружения
• Минимизация кода валидации и ошибок
Пример использования:
var UserSchema = zog.Object(map[string]zog.Schema{
"username": zog.String().Min(3).Max(20),
"email": zog.String().Email(),
"age": zog.Number().Min(18),
})
func main() {
data := map[string]interface{}{
"username": "go_dev",
"email": "test@proglib.io",
"age": 25,
}
parsed, err := UserSchema.Parse(data)
if err != nil {
fmt.Println("Ошибка валидации:", err)
return
}
fmt.Println("Успешно:", parsed)
}
Создаём схему UserSchema, где username должен быть строкой длиной от 3 до 20 символов, email – валидным email-адресом, а age – числом не меньше 18. Передаём тестовый JSON и проверяем его с помощью UserSchema.Parse().
А как вы валидируете данные? Напишите в комментарии👇
🖇 Официальный репозиторий проекта
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍14❤5🥱2
🔄 Минорное обновление Go
Недавно вышло свежее обновление Go версии 1.23.6. Сейчас разберём, что изменилось:
1️⃣ Безопасность: исправлены уязвимости в пакете crypto/elliptic.
2️⃣ Компилятор: устранены ошибки, повышающие стабильность и производительность.
3️⃣ Команда go: исправлены баги, улучшающие работу с инструментами командной строки.
Критичных нововведений нет, но обновиться стоит, особенно если у вас криптография в проекте.
➡️ Подробнее в GitHub milestones
🐸 Библиотека Go разработчика
Недавно вышло свежее обновление Go версии 1.23.6. Сейчас разберём, что изменилось:
Критичных нововведений нет, но обновиться стоит, особенно если у вас криптография в проекте.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3
💬 Отправка push-уведомлений с помощью Go
Если вам нужно регулярно напоминать себе о важных делах, целях или просто получать мотивационные сообщения, можно настроить автоматическую систему push-уведомлений.
🛠 Что понадобится:
1. Аккаунт Pushover, сервиса для отправки push-уведомлений.
2. API-ключ Pushover. Нужен для авторизации и отправки сообщений.
3. Файл с вашими целями. Обычный .txt с напоминаниями.
📲 Как это работает:
В файле хранятся ежедневные цели. Бот, написанный на Go, выбирает одну из целей — случайным образом или в заданном порядке — и отправляет её через Pushover в виде push-уведомления. Это происходит автоматически каждый день в установленное время.
💬 Интересная идея? Или в вашей жизни достаточно таск-трекеров? Ждём ваши мысли в комментариях👇
➡️ Посмотреть реализацию бота
🐸 Библиотека Go разработчика
Если вам нужно регулярно напоминать себе о важных делах, целях или просто получать мотивационные сообщения, можно настроить автоматическую систему push-уведомлений.
🛠 Что понадобится:
1. Аккаунт Pushover, сервиса для отправки push-уведомлений.
2. API-ключ Pushover. Нужен для авторизации и отправки сообщений.
3. Файл с вашими целями. Обычный .txt с напоминаниями.
📲 Как это работает:
В файле хранятся ежедневные цели. Бот, написанный на Go, выбирает одну из целей — случайным образом или в заданном порядке — и отправляет её через Pushover в виде push-уведомления. Это происходит автоматически каждый день в установленное время.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1
This media is not supported in your browser
VIEW IN TELEGRAM
📱 GitHub в стиле TikTok
GitTok — это новый способ исследовать репозитории GitHub.
Вместо привычного поиска и просмотра списков, пользователи просто свайпают через репозитории, как в TikTok, мгновенно получая основную информацию: описание, количество звёзд и недавнюю активность.
➡️ Попробовать полистать репозитории
🐸 Библиотека Go разработчика
GitTok — это новый способ исследовать репозитории GitHub.
Вместо привычного поиска и просмотра списков, пользователи просто свайпают через репозитории, как в TikTok, мгновенно получая основную информацию: описание, количество звёзд и недавнюю активность.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁36👾4🌚3👍1🥱1
🤖 AI угадывает, что на картинке
Go хоть и не самый популярный язык в сфере AI, но его простота, производительность и удобная работа с сетью делают его интересным выбором для таких задач.
Интеграция с Gemini Pro Vision позволяет разработчикам без сложных настроек использовать компьютерное зрение в своих приложениях.
🛠 Реализация: изображение кодируется в base64, отправляется в API Gemini Pro Vision, а затем AI анализирует пиксели и пытается угадать, что на картинке.
Прежде чем приступать к изучению кода — попробуйте демо 👈
📎 Подробнее о реализации
🐸 Библиотека Go разработчика
Go хоть и не самый популярный язык в сфере AI, но его простота, производительность и удобная работа с сетью делают его интересным выбором для таких задач.
Интеграция с Gemini Pro Vision позволяет разработчикам без сложных настроек использовать компьютерное зрение в своих приложениях.
🛠 Реализация: изображение кодируется в base64, отправляется в API Gemini Pro Vision, а затем AI анализирует пиксели и пытается угадать, что на картинке.
Прежде чем приступать к изучению кода — попробуйте демо 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👾2😁1