Библиотека Go-разработчика | Golang
23.3K subscribers
2.07K photos
40 videos
87 files
4.43K links
Все самое полезное для Go-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/32d20779

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
🤔 Какие вебинары вам действительно нужны?

Привет, Go-разработчики! 👋

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

Ваши ответы дадут нам понимание, какие темы и форматы действительно важны, а также помогут сделать вебинары интереснее и продуктивнее.

Заполнение займет всего пару минут, а нам это очень поможет! Спасибо, что участвуете в нашем развитии! 💙

👉
Пройти опрос
👍2
🎧 Новый выпуск подкаста о Go

В последнем эпизоде подкаста Cup o' Go ведущие обсуждают актуальные события в мире Go.

Основные темы выпуска:

Обновления безопасности: релизы Go 1.23.6, 1.22.12 и кандидат на релиз 1.24rc3, включающие важные исправления уязвимостей.

Предложение по автоматизации миграций: принятие предложения cmd/fix для автоматизации простых депрекаций.

Атаки на цепочки поставок: обсуждение недавней вредоносной активности, использующей кэширование Go Module Proxy для сохранения вредоносных пакетов.

🖇 Слушать обсуждение новостей

🐸Библиотека Go разработчика #подкаст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2
Разбираем cron-like решения

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

Простой вариант — time.AfterFunc() или time.Ticker()

time.AfterFunc позволяет выполнить функцию однократно после заданной задержки:
time.AfterFunc(3*time.Second, func() {
fmt.Println("Executed after 3 seconds")
})


ticker
используется для периодического выполнения задач через определенные интервалы времени:
ticker := time.NewTicker(2 * time.Second)
defer ticker.Stop()

for i := 0; i < 3; i++ {
<-ticker.C
fmt.Println("Task executed at:", time.Now())
}



Сторонние библиотеки robfig/cron и gocron

robfig/cron поддерживает синтаксис crontab для планирования задач:
c := cron.New()

// Планируем задачу каждые 5 секунд
c.AddFunc("*/5 * * * * *", func() {
fmt.Println("Cron job executed at:", time.Now())
})

c.Start()


gocron предлагает простой API для повторяющихся задач:
s := gocron.NewScheduler(time.UTC)

s.Every(10).Seconds().Do(func() {
fmt.Println("Scheduled task executed at:", time.Now())
})

s.StartAsync()


Системный cron

Вместо того чтобы держать Go-процесс постоянно запущенным, можно использовать системный демон cron для выполнения Go-скриптов.
* * * * * /path/to/your-go-program


Если нужна простая задержка – хватит time.Ticker(). Если расписание сложнее – берём cron или gocron.

➡️ Разбор всех вариантов — в статье

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍234
Как применять сторителлинг на IT-собеседовании

Чтобы выделиться среди других кандидатов, можно использовать сторителлинг — инструмент, который помогает не только запомниться работодателю, но и показать свои софт-скиллы и опыт в выгодном свете.

➡️ Что внутри статьи:

▪️ Почему сторителлинг работает лучше сухого перечисления навыков.

▪️ Советы по созданию историй для IT-собеседований.

▪️ Готовые примеры успешных историй.

🔗 Читать статью

🔵 Чтобы подготовиться к IT-собеседованию, попробуйте наш курс «Алгоритмы и структуры данных»
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
⚙️ Управление памятью с weakPackage

Go 1.24 привнес нововведение — пакет weak, который позволяет использовать слабые указатели для оптимизации работы с памятью.

Что такое слабые указатели

Обычно, когда в Go создается переменная, она не удаляется из памяти, пока на нее есть ссылки. Это приводит к возможным утечкам памяти в кэше или структурах данных, которые «забывают» очистить объекты.

Слабые указатели решают эту проблему: они не мешают сборке мусора — объект удаляется, если на него нет сильных ссылок.

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

package main

import (
"fmt"
"runtime/weak"
)

func main() {
obj := &struct{ Data string }{"Hello, Weak!"}

ref := weak.New(obj) // Создаем слабую ссылку

obj = nil // Убираем сильную ссылку

runtime.GC() // Принудительно запускаем GC

if ref.Get() == nil {
fmt.Println("Object was garbage collected!")
} else {
fmt.Println("Object is still alive:", ref.Get())
}
}

Важно: weak.Get() возвращает nil, если объект был удален сборщиком мусора.

Где это полезно

Пример кэширования с weak:
cache := make(map[string]*weak.Ref)

func getCachedData(key string) *Data {
if ref, found := cache[key]; found {
if data := ref.Get().(*Data); data != nil {
return data
}
}
newData := fetchDataFromDB(key)
cache[key] = weak.New(newData)
return newData
}

Если кэшированный объект перестанет использоваться, Go автоматически освободит память.

📎 Подробнее про слабые указатели

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22🤔53👍1👾1
🛠 Разработка CLI-приложения с миграциями и генерацией кода

Показываем ещё один пример приложения на Go. В нём можно попрактиковать:

• Настройку окружения: подключение PostgreSQL к Go.

• Работу с миграциями: управление схемами базы данных.

• Генерацию кода: ускоряем разработку и минимизируем ошибки.

• CLI-инструменты: автоматизация работы с БД.

Как это можно использовать


1️⃣ Менеджер задач. Создаешь CLI-приложение, где можно добавлять, удалять и редактировать задачи в БД.

2️⃣ Блог-платформа. Автоматически генерируешь код для работы с постами, комментариями и пользователями.

3️⃣ CRM-система. База клиентов, заказы, отчеты – все управляется через CLI.

🖇 В статье всё подробно разобрано с кодом и пояснениями.

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍5
🔄 Асинхронное кэширование в Go

SturdyC – это легковесная, но мощная библиотека кэширования для Go, которая поможет уменьшить нагрузку и повысить производительность.

🔍 Что делает SturdyC особенным

• Объединение запросов (Request Coalescing). Предотвращает лавины запросов, если кэш отсутствует.

• Асинхронное обновление данных. Данные обновляются в фоне, не блокируя основной поток.

• Минимизация блокировок. Неблокирующие чтения + умное шардирование.

• Гибкие настройки. Адаптируется под разные сценарии кэширования.

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

import (
"fmt"
"github.com/viccon/sturdyc"
"time"
)

func main() {
cache := sturdyc.New[string, string](time.Minute)

cache.Set("user_1", "John Doe")

value, found := cache.Get("user_1")
if found {
fmt.Println("User found in cache:", value)
} else {
fmt.Println("User not in cache")
}
}


➡️ Репозиторий проекта на GitHub

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🏗 🔨 Как не сломать продакшен: 8 основных паттернов распределенных систем

Разработка распределённых систем сопряжена с множеством вызовов: от управления состоянием и взаимодействия сервисов до обработки отказов и масштабирования. Чтобы упростить решение этих задач, инженеры используют проверенные временем архитектурные паттерны.

В статье рассматриваются ключевые шаблоны, помогающие строить надёжные и эффективные распределённые системы.

➡️ Читать статью

🐸Библиотека devops'a
Please open Telegram to view this post
VIEW IN TELEGRAM
🎨 Gowall: цветовая палитра начинается с вдохновения

Gowall – это CLI-инструмент, который превращает любое изображение в красивую цветовую схему. Поддерживает Catppuccin, Nord, Gruvbox, Solarized и другие темы. Для тех, кто устал настраивать цвета вручную.

Что умеет Gowall:

Извлекать цветовую схему из любого изображения.

Преобразовывать изображения в пиксель-арт.

Масштабировать картинки с улучшением качества.

Автоматически инвертировать цвета и заменять их на заданные.

Написан на Go для разработчиков, дизайнеров и любителей кастомизации!

🖇 Исходный код проекта в репозитории

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🆚 Go vs C#

Выбор языка — это всегда компромисс между производительностью, удобством и экосистемой. Давайте разберёмся, чем отличаются Go и C#.

Область применения

• Go: создан Google, ориентирован на простоту, скорость и параллельность. Отлично подходит для облачных сервисов, микросервисов и высоконагруженных систем.

• C#: язык Microsoft, мощный инструмент для корпоративных решений, игр (Unity) и десктопных приложений.

Кроссплатформенность

• Go: отлично компилируется под разные платформы без зависимостей.

• C#: поддерживает кроссплатформенность через .NET Core, но требует среды выполнения.

Система типов

• Go: строгая, но минималистичная. Отсутствует наследование, но есть интерфейсы.

• C#: мощная объектно-ориентированная система с поддержкой дженериков, интерфейсов и функционального программирования.

Где какой язык лучше

Выбирайте Go, если:

Нужна максимальная производительность без лишней сложности.
Работаете с микросервисами, API, контейнерами, облачными сервисами.
Важна лёгкость развертывания без сложных зависимостей.

Выбирайте C#, если:

Разрабатываете десктопные приложения или сервисы под Windows.
Нужна мощная экосистема с продвинутыми библиотеками.
Создаёте игры на Unity.

➡️ Подробное сравнение в статье

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
😁37👍114👾3😢1
✏️ Практическое руководство по Go

Нашли удобный ресурс для изучения Go на примерах кода. Он построен в формате "пример + объяснение". Темы сгруппированы по уровням сложности, начиная с основ синтаксиса и заканчивая конкурентным программированием.

Примеры тем:

🔹 Переменные и типы данных — объявление переменных, использование const и :=.

🔹 Циклы и условия — for, if-else, switch.

🔹 Функции и замыкания — объявление, передача аргументов, использование анонимных функций.

🔹 Структуры и интерфейсы — работа со сложными типами данных.

🔹 Горутины и каналы — конкурентное программирование в Go.

🔹 Файлы, потоки, HTTP-запросы — ввод-вывод, сетевое взаимодействие.

🖇 Изучить примеры Go-кода

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6😁6👍5
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования

🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion

#️⃣C#

Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
📊 Как себя чувствует IT-рынок в 2025 году?

Друзья, запускаем важное исследование рынка труда в IT!

Нам очень важно понять:
• Как изменились зарплаты
• Что происходит с наймом
• Есть ли сокращения или рост

🔐 Опрос полностью анонимный
⏱️ Займёт всего 3-5 минут
📈 Результаты опубликуем в подробной статье

Ваши ответы помогут составить реальную картину происходящего в индустрии.

👉 Пройти опрос
⚙️ Переход с React на WebAssembly

Компания Dagger решила сделать смелый шаг — полностью заменить фронтенд на React с TypeScript на Go с WebAssembly.

Почему отказались от React

• Две кодовые базы (TypeScript для фронтенда и Go для бекенда) замедляли разработку и усложняли поддержку.

• Несогласованность логики: приходилось дублировать бизнес-логику между Go и TypeScript.

• Зависимость от фронтенд-стека: сложности в поиске разработчиков с опытом React.

Как реализовали новый интерфейс

1. Использовали Go-app — фреймворк для создания PWA на Go.

2. Перенесли бизнес-логику из React в Go, избегая двойного кода.

3. Настроили сборку под WebAssembly для запуска Go-кода прямо в браузере

В результате время выпуска новых фич сократилось на треть.

➡️ Подробнее в блоге компании

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥205👾4👍3🎉2
😳 Если бы языки программирования были девушками

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

Мы заглянули в Тиндер разработчика и нашли там Go. Как вам? 😏

Еще больше прекрасных дам языков программирования — в нашем канале Библиотека программиста.

Свайпайте и выбирайте свой мэтч ❤️

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
10🥱5😢3🥰1
🛠 CQRS и паттерн «Репозиторий»

Перепутанные SQL-запросы, сложный рефакторинг и отсутствие тестируемости — частые проблемы монолитных приложений.

Решить их помогают проверенные архитектурные паттерны: CQRS, который разделяет чтение и запись, и паттерн «Репозиторий», который упрощает работу с базой

Что такое CQRS

CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который разделяет операции чтения и записи. Вместо одного интерфейса для всех операций мы получаем две независимые модели.

Пример интерфейсов:
// Интерфейс для записи
type UserCommand interface {
Create(user *User) error
Update(user *User) error
Delete(id int) error
}

// Интерфейс для чтения
type UserQuery interface {
GetByID(id int) (*User, error)
ListAll() ([]*User, error)
}


Что такое паттерн «Репозиторий»

Паттерн «Репозиторий» — это слой между бизнес-логикой и источником данных. Он инкапсулирует логику доступа к базе и предоставляет простой интерфейс для работы с данными.

Пример паттерна «Репозиторий»:

type UserRepository interface {
GetByID(id int) (*User, error)
Create(user *User) error
Update(user *User) error
Delete(id int) error
}

Такой интерфейс можно реализовать для разных источников данных — in-memory, MSSQL, PostgreSQL или Redis.

CQRS — это официант, который принимает заказы, а «Репозиторий» — повар. Главное — чтобы заказ не завис на «кухне»... или в deadlock’е.

🖇 Подробнее об этих подходах

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱16👍10😁21
🐳 Делаем конкурента DeepSeek R1-Zero на домашней пекарне: метод GRPO в Unsloth

Обычно LLM требуют мощных GPU, но теперь даже на видеокарте с ограниченной памятью можно обучать модели логического рассуждения.

💡 Фишка — новый алгоритм GRPO, который позволяет моделям развивать логическое мышление без вмешательства человека.

Подробнее в нашей статье: https://proglib.io/sh/MyBCbq9is5
👍42
🌳 Бинарное дерево поиска (BST) в Go

BST — это бинарное дерево, где:

• Значение в левой ветви меньше значения в узле.

• Значение в правой ветви больше значения в узле.

Такое свойство обеспечивает эффективный поиск, вставку и удаление — в среднем за O(log n).

Пример реализации:
// Node — узел бинарного дерева
type Node struct {
Value int
Left *Node
Right *Node
}

// Insert — вставка нового значения в дерево
func (n *Node) Insert(value int) {
if value < n.Value {
if n.Left == nil {
n.Left = &Node{Value: value}
} else {
n.Left.Insert(value)
}
} else if value > n.Value {
if n.Right == nil {
n.Right = &Node{Value: value}
} else {
n.Right.Insert(value)
}
}
}

// Search — поиск значения в дереве
func (n *Node) Search(value int) *Node {
if n == nil {
return nil
}
if n.Value == value {
return n
} else if value < n.Value {
return n.Left.Search(value)
} else {
return n.Right.Search(value)
}
}

// InOrderTraversal — обход дерева в порядке (LNR)
func (n *Node) InOrderTraversal() {
if n == nil {
return
}
n.Left.InOrderTraversal()
fmt.Print(n.Value, " ")
n.Right.InOrderTraversal()
}


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

1️⃣ Вставка:

• Если значение меньше текущего узла, идём в левое поддерево.

• Если больше — в правое.

• Если узел пуст, создаём новый.

2️⃣ Поиск:

• Сравниваем искомое значение с текущим.

• Меньше — идём влево, больше — вправо, равное — нашли.

3️⃣ Обход:

• In-order обход (LNR) обходит узлы в отсортированном порядке.

💬 А вы уже реализовали BST? Делитесь опытом и вопросами в комментариях!

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
19👍17🥱4😁2
⚠️ В машинном обучении, как в любви: слишком идеальные предсказания – это подозрительно!

Когда модель слишком прилипчива к тренировочным данным, результат оказывается… ну, как в отношениях, когда всё кажется идеальным, но реальность ломает сердце.

Оверфиттинг (Overfitting) – модель так хорошо запомнила тренировочные данные, что на реальных данных начинает путаться.
💔 В любви: «Я выбрал идеального партнёра по профилю, а в жизни выяснилось, что его «идеальность» – всего лишь иллюзия!»

Андерфиттинг (Underfitting) – модель обучена настолько поверхностно, что предсказывает мэтчи случайным образом.
💔 В любви: «Мне нравятся только люди с именем Александр, а всех остальных я даже не замечаю – бедный фильтр!»

Неправильный выбор фичей (Feature Selection Fail) – если модель опирается на неважные признаки, она предсказывает мэтчи хуже случайности.
💔 В любви: «Ты любишь авокадо? Значит, мы созданы друг для друга!» – а потом оказывается, что это вовсе не про важное.

🎯 На вебинаре мы разобрали, как избежать этих ошибок и создать работающую модель для speed dating, которая на самом деле помогает находить любовь! Вчера мы не просто говорили о любви – мы её предсказывали!

🔥 Спасибо всем, кто был с нами и участвовал!

💘 Как же это было?

Если ты пропустил вебинар или хочешь пересмотреть запись – просто перейди по [ссылке] и получи видео 😉
🥱4👾4
📢 Где «выстрелит» твой стартап: 8 площадок для запуска и продвижения IT-проекта

Собрали для тебя проверенные места, где можно бесплатно показать свой продукт первым пользователям и даже найти инвестора. Работает как для зарубежного, так и для российского рынка.

👍 Ссылка на статью: https://proglib.io/sh/LrcFGsnuyU
👍3