Какую сумму вы тратите на биохакинг ежемесячно?
Anonymous Poll
12%
💰 До 5000 руб.
4%
💸 5000-15000 руб.
1%
🏦 15000-30000 руб.
2%
💎 Более 30000 руб.
81%
0️⃣ Не трачу деньги на это
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Memory Ballast в Go: Зачем он был нужен и почему его больше не используют
Вы подписаны на наш канал с вопросами для собесов? Если да, то скорее всего попытались ответить на вопрос: «Что такое Memory Ballast?» Сейчас объясним подробнее!
❓Что такое Memory Ballast?
Memory Ballast — это техника, при которой в программе намеренно выделяется большой объём памяти (например, var ballast = make([]byte, 1<<30)), чтобы повлиять на поведение сборщика мусора (GC).
❓Зачем это нужно?
• Снизить частоту запусков GC, уменьшив паузы (stop-the-world).
• Стабилизировать потребление памяти в высоконагруженных приложениях.
⚙️ Почему его больше не используют?
• Появился SetMemoryLimit (Go 1.19+): теперь можно явно задать лимит памяти для приложения с помощью runtime/debug.SetMemoryLimit. Это более гибкий и безопасный способ управления GC.
• Улучшения в GC: сборщик мусора стал умнее и эффективнее, уменьшив необходимость в ручной оптимизации.
• Ballast — это хак: выделение лишней памяти может привести к неочевидным проблемам, например, избыточному потреблению ресурсов.
🐸 Библиотека Go разработчика
Вы подписаны на наш канал с вопросами для собесов? Если да, то скорее всего попытались ответить на вопрос: «Что такое Memory Ballast?» Сейчас объясним подробнее!
❓Что такое Memory Ballast?
Memory Ballast — это техника, при которой в программе намеренно выделяется большой объём памяти (например, var ballast = make([]byte, 1<<30)), чтобы повлиять на поведение сборщика мусора (GC).
❓Зачем это нужно?
• Снизить частоту запусков GC, уменьшив паузы (stop-the-world).
• Стабилизировать потребление памяти в высоконагруженных приложениях.
• Появился SetMemoryLimit (Go 1.19+): теперь можно явно задать лимит памяти для приложения с помощью runtime/debug.SetMemoryLimit. Это более гибкий и безопасный способ управления GC.
• Улучшения в GC: сборщик мусора стал умнее и эффективнее, уменьшив необходимость в ручной оптимизации.
• Ballast — это хак: выделение лишней памяти может привести к неочевидным проблемам, например, избыточному потреблению ресурсов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Casvisor - это open-source платформа, которая помогает управлять и облачными решениями с одного экрана и автоматически выполняет рутинные задачи.
Основные возможности Casvisor
• Централизованный контроль над серверами, хранилищами, сетями и контейнерами: Kubernetes, Docker.
• Поддержка мультиклаудных сред: AWS, Azure, GCP, OpenStack.
• Шаблоны для развёртывания приложений.
• Интеграция с CI/CD-пайплайнами.
• Дашборды для отслеживания метрик производительности: CPU, память, сеть.
• Логирование и алертинг в реальном времени.
• Ролевая модель доступа для пользователей и сервисов.
• Аудит действий и защита от несанкционированного доступа.
Отличная возможность посмотреть на использование Go в реальном проекте и даже поучаствовать в разработке!
Please open Telegram to view this post
VIEW IN TELEGRAM
Тысячи запросов в секунду, рассылка уведомлений, обработка платежей — это не превратится в хаос, если между компонентами системы стоит очередь сообщений. Новички могут не знать что такое очередь сообщений, чтобы это исправить:
Простое объяснение с картинками введёт кого-угодно в курс дела!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔍 Снижение нагрузки на сборщик мусора в Go
В высоконагруженных приложениях на Go частое выделение и освобождение памяти создает давление на сборщик мусора. Показываем, как оптимизировать память через повторное использование объектов и sync.Pool.
➡️ Повторное использование объектов
Плохой подход:
Лучше:
Примечание: Работает только в однопоточных сценариях.
➡️ Использование sync.Pool
sync.Pool позволяет создавать пулы объектов для многократного применения объектов:
• Пулы эффективны для небольших данных: буферы, структуры
• Не используйте пулы для редко создаваемых или тяжелых объектов
📎 Подробнее в статье
🐸 Библиотека Go разработчика
В высоконагруженных приложениях на Go частое выделение и освобождение памяти создает давление на сборщик мусора. Показываем, как оптимизировать память через повторное использование объектов и sync.Pool.
Плохой подход:
func process() []byte {
return make([]byte, 1024) // Новый срез каждый раз.
}
Лучше:
var buffer = make([]byte, 1024)
func process() []byte {
return buffer // Переиспользование.
}
Примечание: Работает только в однопоточных сценариях.
sync.Pool позволяет создавать пулы объектов для многократного применения объектов:
pool := sync.Pool{
New: func() any { return make([]byte, 1024) },
}
buffer := pool.Get().([]byte) // Взяли из пула.
defer pool.Put(buffer) // Вернули после использования.
• Пулы эффективны для небольших данных: буферы, структуры
• Не используйте пулы для редко создаваемых или тяжелых объектов
Please open Telegram to view this post
VIEW IN TELEGRAM
В языке программирования Go с версии 1.18 введены обобщения (generics), которые позволяют создавать гибкий и переиспользуемый код.
Без применения comparable можно столкнуться с ошибками компиляции при попытке сравнения несравнимых типов, например, срезов или карт.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 Интеграция AI в Go-приложения
Deepseek-Go — это обёртка для языка Go, предназначенная для интеграции с платформой Deepseek. Она предоставляет интерфейс для взаимодействия с AI-функциями Deepseek, включая чат-комплиты с поддержкой потоковой передачи, отслеживание использования токенов и другие возможности.
✏️ Пример использования:
➡️ GitHub репозиторий проекта
🐸 Библиотека Go разработчика
Deepseek-Go — это обёртка для языка Go, предназначенная для интеграции с платформой Deepseek. Она предоставляет интерфейс для взаимодействия с AI-функциями Deepseek, включая чат-комплиты с поддержкой потоковой передачи, отслеживание использования токенов и другие возможности.
func main() {
// Создание клиента Deepseek
client := deepseek.NewClient(os.Getenv("DEEPSEEK_KEY"))
// Создание запроса на чат-комплит
request := &deepseek.ChatCompletionRequest{
Model: deepseek.DeepSeekChat,
Messages: []deepseek.ChatCompletionMessage{
{Role: constants.ChatMessageRoleSystem,
Content: "Здесь задаём как отвечать"},
{Role: constants.ChatMessageRoleUser,
Content: "Здесь спрашиваем"},
},
}
// Отправка запроса и обработка ответа
ctx := context.Background()
response, err := client.CreateChatCompletion(ctx, request)
if err != nil {
log.Fatalf("Ошибка: %v", err)
}
// Вывод ответа
fmt.Println("Ответ:", response.Choices[0].Message.Content)
}
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Эффективная работа с GitHub становится проще с использованием расширений для браузера Chrome. Вот три инструмента, которые помогут вам оптимизировать процесс разработки:
Octotree добавляет древовидную структуру файлов в интерфейс GitHub, облегчая навигацию по проектам с большим количеством директорий и файлов.
OctoLinker превращает импортированные модули и зависимости в коде в кликабельные ссылки. Это позволит мгновенно переходить к соответствующим файлам или репозиториям, ускоряя процесс изучения и понимания кода.
Refined GitHub дополняет стандартный интерфейс GitHub, добавляя множество полезных функций, таких как улучшенная навигация, дополнительные кнопки и настройки, которые делают работу с платформой удобнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
MongoDB — NoSQL-база данных, которая упрощает хранение и обработку больших объёмов данных. Её документно-ориентированная структура делает работу с JSON-подобными данными удобной и гибкой.
В руководстве разобраны концепции MongoDB: CRUD-операции, создание индексов для ускорения запросов, а также рекомендации по управлению коллекциями и документами.
Примеры помогут быстро освоить базовые техники и применить в проектах.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Если вы вдруг забыли: у нас можно купить рекламу
Библиотека программиста — медиа с миллионной аудиторией из IT-сферы. Что у нас есть:
• 60+ телеграм-каналов по разным IT-направлениям, от Python до DevOps
• 25 000 daily active users на сайте, который поможет усилить продвижение
• Возможность сделать нативную интеграцию, виральный пост и не только
За айтишной аудиторией — к нам 😏
По вопросам рекламы пишите сюда → @proglib_adv
Библиотека программиста — медиа с миллионной аудиторией из IT-сферы. Что у нас есть:
• 60+ телеграм-каналов по разным IT-направлениям, от Python до DevOps
• 25 000 daily active users на сайте, который поможет усилить продвижение
• Возможность сделать нативную интеграцию, виральный пост и не только
За айтишной аудиторией — к нам 😏
По вопросам рекламы пишите сюда → @proglib_adv
Сервис сокращения URL — отличный способ улучшить навыки веб-разработки и работы с Go. В этом проекте используется база данных Redis и контейнеризация с помощью Docker.
Этапы разработки:
🖇 Подробное описание каждого этапа в источнике.
Или можно посмотреть исходный код на GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
☢️ Как не попасть в токсичную компанию: чек-лист для айтишника
C офферами от Сбера, Вконтакте, Яндекса и других айтишных гигантов все понятно — это стабильные компании, работать в которых мечтают многие.
Но вот что делать, если вас зовут работать в ноунейм-компанию, при этом предлагают з/п сильно выше рынка, полную удаленку и 100500 «плюшек»?
Рассказываем, как проверить будущего работодателя и не оказаться в компании-однодневке с невыплатами зарплаты и токсичной культурой.
👉 Читать статью
C офферами от Сбера, Вконтакте, Яндекса и других айтишных гигантов все понятно — это стабильные компании, работать в которых мечтают многие.
Но вот что делать, если вас зовут работать в ноунейм-компанию, при этом предлагают з/п сильно выше рынка, полную удаленку и 100500 «плюшек»?
Рассказываем, как проверить будущего работодателя и не оказаться в компании-однодневке с невыплатами зарплаты и токсичной культурой.
👉 Читать статью
Библиотека 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
Forwarded from Книги для программистов
📚 ТОП-11 книг по базам данных в 2025 году
Хотите разобраться в базах данных, но не знаете, с чего начать? Мы подготовили подборку из 11 лучших книг, которые помогут вам освоить раздичные базы данных, паттерны и антипаттерны, а также оптимизацию запросов.
🔗 Читайте в статье
Хотите разобраться в базах данных, но не знаете, с чего начать? Мы подготовили подборку из 11 лучших книг, которые помогут вам освоить раздичные базы данных, паттерны и антипаттерны, а также оптимизацию запросов.
🔗 Читайте в статье
🌐 Современный подход к работе с 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
🧑💻 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