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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
🍿 Социальный опрос

Как вам контент этой недели? Что понравилось, а что не зашло?

Велком в комменты 👇

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👏31
Оффтоп в понедельник

У нас к вам несерьёзный вопрос — как вы называете X? Не букву, а социальную сеть. До сих пор говорите твиттер или привыкли, к тому, что это теперь икс?

Пишите свои варианты в комменты, а ещё подпишитесь на наш канал в твиттериксе ➡️ Подписаться

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
1👾1
🧑‍💻 Go работать

Смотрите какие вакансии есть в нашем канале с вакансиями — Go jobs.

Software Engineer с ЗП от 6 тысяч €

Мидл разработчик в офис в Казань.

Удалённый мидл с плюсом.

🐸 Библиотека Go-разработчика

#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
2👾1
🤖 Курс «ИИ-агенты для DS-специалистов»

Последняя возможность в этом году освоить ИИ-агентов — курс стартует уже 3 октября! Первый вебинар пройдёт в день старта, а подробности вебинара можно найти на сайте.

📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой.

🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽.

🔗 Записаться на курс и узнать подробности
🌚3😁2
📎 Разница между merge и rebase в git

🐸 Библиотека Go-разработчика

#GoVisual
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🥱72
🕺 Слог или «эс лог»

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

Одни уверены, что это «эс-лог», как аббревиатура.
Другие читают как «слог»

💬 А вы как произносите — эс-лог или слог?

🐸 Библиотека Go-разработчика

#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱14🤔1👾1
🤖 Курс «ИИ-агенты для DS-специалистов»

Последняя возможность в этом году освоить ИИ-агентов с Proglib— старт живых вебинаров на курсе уже 3 октября!

Уже 24 студента изучают 5 лонгридов подготовительного модуля, чтобы сформировать базу к старту живых вебинаров с Никитой Зелинским.

📚 Бонус: при оплате до 30 сентября вы получите дополнительный лонгрид для подготовки к курсу. Это отличный способ подойти к занятиям уже с базой.

🔥 А ещё после прохождения курса у вас будет достаточно знаний, чтобы участвовать в хакатоне с призовым фондом 1 125 000 ₽.

🔗 Записаться на курс и узнать подробности
😁1
Что возвращает метод ctx.Err() после отмены контекста вручную
Anonymous Quiz
24%
nil
5%
false
6%
true
66%
context.Canceled
📎 Где заказать курсовую по программированию

Курсовую по программированию легко заказать онлайн — сервисов действительно много.

Проблема в том, что не все они работают честно: бывает низкое качество, завышенные цены или несоблюдение сроков.

По ссылке — подборка площадок, которые в 2025 году показали стабильный результат.

➡️ Узнать, где лучше

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7😢3👍1🥱1
👀 Необычный опыт в Go

В Go всё крутится вокруг горутин и каналов. Но автор видео решил проверить: а можно ли в языке сделать что-то вроде async/await?

В итоге он собирает свой маленький Future-тип на дженериках: запускает асинхронные задачи, дожидается результата через await, разбирается с паниками и показывает, где такой подход ломается.

➡️ Смотреть что получилось

🐸 Библиотека Go-разработчика

#GoVisual
Please open Telegram to view this post
VIEW IN TELEGRAM
7😁4🥰3👍2
👨‍💻 Open source без правил

Эрик Рэймонд, одна из ключевых фигур в истории open source и автор The Cathedral and the Bazaar, резко высказался о кодексах поведения в проектах с открытым исходным кодом.

По его словам, за десять лет стало ясно: «Codes of Conduct» не укрепляют сообщество, а наоборот превращаются в источник конфликтов, политики и бессмысленной драмы.

Рэймонд предлагает радикальное решение — полностью отказаться от подобных документов. А если формально без них нельзя, заменить всё одной фразой: «Если работа с вами доставляет больше неудобств, чем того требует ваш вклад, вас выгонят».

➡️ Пост в X от Эрика

💬 Что думаете? Кодекс поведения В С Ё ?

У нас тоже есть свой X

🐸 Библиотека Go-разработчика

#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥3💯2👾2🤔1
👾 AI-агенты — настоящее, о котором все говорят!

Уже 3 октября стартует второй поток нашего нового курса «AI-агенты для DS-специалистов».

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

На обучении вы соберёте полноценные LLM-системы с учётом особенностей доменных областей, получите hands-on навыки RAG, Crew-AI / Autogen / LangGraph и агентов.

🎓 В рамках курса вы научитесь:

1️⃣ адаптировать LLM под разные предметные области и данные
2️⃣ собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
3️⃣ строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой

Научитесь применять похожие подходы в разных доменных областях, получите фундамент для уверенного прохождения NLP system design интервью и перехода на следующий грейд.

🗓️ Завтра первый вебинар, успевайте залететь в ряды ИИ-первопроходцев 👈🏻
😁1
🍑 Копипаста для прода

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

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

Интерфейс, очереди и воркеры:
type Job interface {
Execute(ctx context.Context) error
}

type JobQueue struct {
jobs chan *TrackedJob
wg sync.WaitGroup
}

func (q *JobQueue) Submit(job Job) {
q.wg.Add(1)
q.jobs <- NewTracked(job)
}


Воркеры читают из q.jobs, запускают задачу, повторяют при ошибках.

Повторы и таймауты:
func (t *TrackedJob) ExecuteWithRetry(ctx context.Context) {
for t.retries < t.MaxRetries {
ctx, cancel := context.WithTimeout(ctx, t.Timeout)
err := t.Job.Execute(ctx)
cancel()
if err == nil { return }
t.retries++
time.Sleep(backoff(t.retries))
}
}


Чтобы задачи не терялись:
type Persister interface {
Save(job *TrackedJob) error
Update(jobID string, status string) error
LoadPending() ([]*TrackedJob, error)
}


Простейший вариант — JSON-файлы. После рестарта: LoadPending() и заново в очередь.

Использование:
q := NewJobQueue(10, 3)
q.Submit(&EmailJob{To: "[email protected]"})
q.Submit(&ResizeJob{File: "pic.png"})
q.Wait()


Такой дизайн легко расширить: добавить Redis вместо файлов, метрики, мониторинг.

🐸 Библиотека Go-разработчика

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍156👾1
👀 Алгоритм Дейкстры

Алгоритм Дейкстры — это классический способ найти кратчайшие пути от одной вершины графа до всех остальных, если рёбра имеют неотрицательные веса.

Как он работает:

1. Берём стартовую вершину и задаём для неё расстояние = 0, для всех остальных ?.

2. Поддерживаем множество вершин, для которых уже найдено минимальное расстояние (назовём их «посещёнными»).

3. На каждом шаге выбираем вершину с минимальным текущим расстоянием, которая ещё не посещена.

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

5. Повторяем шаги, пока все вершины не будут посещены или пока расстояния не перестанут улучшаться.

🐸 Библиотека Go-разработчика

#GoVisual
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍5🥱2
🧪 Группировка сабтестов

Обычно для тестов хватает простого t.Run. Но если проект растёт, и кейсов становится десятки, без группировки легко утонуть в дублировании и путанице.

Зачем группировать?

— Разные setup/teardown для подмножеств тестов
— Логическая структура (например, тесты по эндпоинтам API)
— Управление параллельностью выполнения

Простейший пример:
func TestAPI(t *testing.T) {
t.Run("User", func(t *testing.T) {
t.Run("Create", func(t *testing.T) { /* ... */ })
t.Run("Delete", func(t *testing.T) { /* ... */ })
})

t.Run("Order", func(t *testing.T) {
t.Run("Create", func(t *testing.T) { /* ... */ })
t.Run("Cancel", func(t *testing.T) { /* ... */ })
})
}


➡️ Источник

🐸 Библиотека Go-разработчика

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11