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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
📝 Интерактивная шпаргалка по GoLand

Все важные сочетания, которые помогут вам ускорить работу в IDE и сделать процесс разработки максимально комфортным.

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

➡️ Изучить хоткеи

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱16👍3
💬 Как оставлять комментарии в чате нашего канала

В нашем чате работает бот Shieldy — он защищает от спама, запрашивая у новых участников решение простой капчи.

⚠️ Проблема, с которой сталкиваются многие: вы нажимаете под постом «Прокомментировать», пишете что-то, а потом получаете бан и не можете писать комментарии.

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

Как присоединиться к чату, чтобы бот вас не забанил

— Зайдите в описание канала с телефона и нажмите кнопку Discuss / Чат
— Нажмите Join / Присоединиться
— Сразу обратите внимание на сообщение от бота Shieldy
— Решите простой пример и отправьте ответ в чат

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

❗️ Если вас все-таки забанили

— Это временная блокировка на несколько минут
— Подождите и попробуйте зайти позже, бот снова отправит вам капчу

Админы канала никак не могут ускорить процесс, бот автоматически снимает с вас блокировку через пару минут. Мы понимаем, что эта система неидеальна, и ищем более удобное решение.

👾 Спасибо, что активно участвуете в обсуждении наших постов!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁1
⚙️ Как сделать select с таймаутом

Чтобы не ждать данные в select бесконечно нужно реализовать таймаут. В Go сделать это можно несколькими способами:

1️⃣ Использование time.After

Подходит для простых случаев, но создает новую time.After при каждом вызове.

select {
case msg := <-ch:
fmt.Println("Получено:", msg)
case <-time.After(2 * time.Second):
fmt.Println("Таймаут!")
}


2️⃣ Использование context.WithTimeout

Можно передавать ctx в функции, что удобно для управления таймаутами в API-запросах или базах данных.
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

select {
case msg := <-ch:
fmt.Println("Получено:", msg)
case <-ctx.Done():
fmt.Println("Таймаут:", ctx.Err())
}


3️⃣ Использование time.NewTimer

В отличие от time.After, NewTimer можно сбрасывать timer.Reset(duration), если нужно обновить таймаут.

timer := time.NewTimer(2 * time.Second)
defer timer.Stop()

select {
case msg := <-ch:
fmt.Println("Получено:", msg)
case <-timer.C:
fmt.Println("Таймаут!")
}


4️⃣ Использование ticker для периодического опроса с таймаутом

Подходит для ожидания с периодической проверкой состояния.

ticker := time.NewTicker(500 * time.Millisecond)
defer ticker.Stop()

timeout := time.After(2 * time.Second)

for {
select {
case msg := <-ch:
fmt.Println("Получено:", msg)
return
case <-ticker.C:
fmt.Println("Ожидание...")
case <-timeout:
fmt.Println("Таймаут!")
return
}
}


5️⃣ Принудительное завершение через select с done каналом

Полезно, когда нужно дождаться завершения другой горутины, но не бесконечно.

done := make(chan struct{})

go func() {
time.Sleep(3 * time.Second)
close(done)
}()

select {
case msg := <-ch:
fmt.Println("Получено:", msg)
case <-done:
fmt.Println("Горутина завершена, но данных нет.")
case <-time.After(2 * time.Second):
fmt.Println("Таймаут!")
}


Каждый из этих вариантов хорош в своей ситуации. Какой из них вам больше подходит? 💬

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥283👍3😁2
🧩💊 Алгоритмическая самоуспокоенность: как мы разучились думать своей головой

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

Это не просто влияет на настроение, но и на способность анализировать информацию, принимать решения и, главное, не становиться частью системы манипуляций.

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

🔗 Подробнее в статье

🐸 Библиотека джависта
Please open Telegram to view this post
VIEW IN TELEGRAM
1😁1
📔 Промт дня: компилятор с объяснениями

Вы когда-нибудь задумывались, что делает Go-компилятор с вашим кодом на самом деле? Этот промт детально разберёт процесс компиляции, покажет шаги оптимизации и объяснит, почему финальный бинарник получился таким, а не иначе:
You are an expert Go compiler, known for your deep understanding of the Go programming language and your ability to efficiently compile Go code. Your goal is to take a given Go program and compile it, optimizing the output for performance and efficiency.

Here is the format you will use to compile the Go code and provide recommendations:

---
## Compilation Process
Describe the steps you would take to compile the provided Go code, including any optimizations or techniques you would use.

## Compiled Output
Provide the compiled output of the Go code, including any relevant information such as file size, execution time, or memory usage.
---


Какими промтами пользуетесь вы? Делитесь в комментариях👇

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🌚2
🚧 Неочевидные грабли в Go – когда всё кажется простым

Go прославился своей лаконичностью, прямолинейностью и минимализмом. Вы пишете код, компилируете – и вроде бы всё отлично. Но как часто случалось, что в простом коде прятались ловушки, которые потом отомстили в самый неподходящий момент?

Делитесь в комментариях своими историями о том, как вы наступали на неочевидные грабли в Go:

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


Начнём с нашего админа:
Завернул обработку запросов в горутину, тесты проходят, ошибок нет. Выкатываем в прод – а часть запросов просто исчезает. Долго разбирался, пока не осознал: главная функция завершалась раньше, чем отрабатывали горутины, и они просто не успевали исполниться.
Теперь всегда использую sync.WaitGroup


🐸Библиотека Go разработчика #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13😁5
📄 Отчёт о покрытии тестами в браузере

Чтобы наслаждаться отчётом о покрытии тестами, сделайте три простых шага:

1. Устанавливаем gocov и gocov-html:
go install github.com/axw/gocov/gocov@latest
go install github.com/matm/gocov-html@latest


2. Генерируем покрытие тестами:
go test -coverprofile=coverage.out ./...


3. Преобразуем в красивый отчёт:
gocov convert coverage.out | gocov-html > coverage.html


Теперь открываем coverage.html в браузере —
и видим, что покрыто, а что — нет.

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥41
📉🤦 152 000 уволенных в IT за год: кому это помогло?

Корпоративная бензопила снова в деле: каждый месяц 2 миллиона американцев теряют работу из-за сокращений. Но действительно ли это помогает компаниям?

🔗 Читать статью
😁41👍1😢1🥱1
👀 Тест на внимательность

Задача простая — слова зашифрованы по горизонтали. Не все из них относятся к Go, но каждое точно знакомо настоящему программисту

💬 Пишите в комментариях, сколько слов удалось найти, и делитесь своим списком под спойлером

🐸Библиотека Go разработчика #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱20👍4🌚4👾1
📰 Дайджест новостей за неделю

Собрали всё важное, чтобы вы могли пропустить. Без nil, без panic(), только конкретика — строго по gofmt'у.

🔄 Go-сервис для GitHub-данных
Простой пример, как на Go сделать REST-сервис, который тянет данные из GitHub. Под капотом: чистая архитектура, PostgreSQL, docker-compose.

🆕 Git 2.49.0
Новые фичи, чистка кода и подготовка к Git 3.0.

📙 Книга про управление в IT
Как стать техлидом без «начальства», влиять на стратегию и архитектуру, поднимать команду и при этом самому расти в глубину

👈 Ловим сравнение указателей
В Go легко случайно сравнить указатели на строки (*a == *b) вместо самих строк. Такая ошибка не упадёт, но может привести к тихим багам.

🐸Библиотека Go разработчика #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2😁21
Как планировщик Go решает, на каком ядре будет выполняться конкретная горутина

В Go планирование горутин не зависит напрямую от операционной системы, а управляется Go-рантаймом, который использует свою собственную модель многозадачности

Go использует модель планирования M:N (M горутин на N потоков). Это означает, что несколько горутин могут быть распределены по нескольким потокам ОС.

В Go есть три ключевых компонента, которые связаны с планированием горутин:

G (goroutine): горутина — поток, который управляется Go-рантаймом. В Go может быть создано много горутин (десятки тысяч и даже миллионы), и они используют системные ресурсы с минимальными затратами.

M (machine): системный поток, который Go использует для выполнения горутин. В операционной системе это обычный поток ОС. В Go обычно количество потоков M ограничено числом доступных ядер процессора.

P (processor): абстракция процессора, которая управляет очередями готовых горутин, которые могут быть исполнены. Каждый процессор может управлять множеством горутин, но горутина будет выполняться только на одном ядре в момент времени.

Go решает, на каком ядре будет выполняться горутина, на основе количества доступных процессоров (runtime.GOMAXPROCS) и текущей загрузки

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🌚32
🧐 Обратная связь после собеседования

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


📊 Давайте устроим небольшой опрос: нужна вам обратная связь после собеса? И если да — какая именно? Пишите в комментарии👇

Напоминаем, вы можете спросить сообщество библиотеки Go и не только! Самые интересные вопросы обязательно опубликуем.

🐸Библиотека Go разработчика #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
💾 Как выбрать стратегию кэширования: разбор 7 популярных алгоритмов

Кешировать нужно с умом. И нет, LRU — не серебряная пуля.

В статье вас ждёт разбор алгоритмов: LRU, LFU, FIFO, ARC и другие
– Примеры, где каждый работает лучше
– Плюсы и минусы подходов
– Практические советы по выбору стратегии

Если проектируете систему с большими нагрузками или оптимизируете производительность — материал будет как раз.

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

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤔2😢2
🛠 Event-Driven архитектура в Go

EDA (Event-Driven Architecture) — это когда каждый компонент системы живёт своей жизнью и просто «подслушивает» интересные ему события. Если сервисы общаются через REST и вы уже устали от retry-логики, timeouts и других прелестей — добро пожаловать в мир событий.

Как это сделать

Самый простой метод всего в три шага — это использовать NATS:

1. Установка NATS (через Docker)

docker run -d --name nats -p 4222:4222 nats:latest


2. Подписка на событие

nc, _ := nats.Connect(nats.DefaultURL)
nc.Subscribe("user.created", func(m *nats.Msg) {
fmt.Printf("Новое событие: %s\n", string(m.Data))
})
select {} // держим соединение открытым


3. Публикация события
nc, _ := nats.Connect(nats.DefaultURL)
nc.Publish("user.created", []byte("Пользователь создан: ID=123"))


Событийно-ориентированная архитектура — это не модный хайп, а здравый подход для гибких систем.

➡️ Подробнее про реализацию

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🥱7🔥53
🎧 103 выпуск подкаста Cup o' Go

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

Что обсудили на этот раз:

• Новый пакет x/exp/stats.

• Больше о typo squatting

• Пользователи Linux и macOS заразились вредоносным ПО, замаскированным под легитимные пакеты Go.

• Поддержка windows/arm удалена в Go 1.26

• DATA-DOG/go-txdb: SQL-драйвер для Go на основе одиночной транзакции.

• peterldowns/pgtestdb: написание эффективных тестов с использованием базы данных для PostgreSQL.

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

🐸Библиотека Go разработчика #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102
⚙️ Линтерный комбайн для Go

Каждый Go-разработчик проходит через это: запускаешь golangci-lint, а он в ответ показывает, что половину твоего кода можно выбросить, а вторую — переписать. Главное — не обижаться. Это просто инструмент, который говорит тебе правду.

Что он умеет:
• Обнаруживает сложные, нечитаемые функции и предлагает упростить.
• Настраивается через YAML.
• Работает быстро, потому что использует кэш и параллельные запуски.
• Легко подключается в CI/CD, работает в GitHub Actions из коробки.

▶️ Быстрый старт
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
golangci-lint run


Пару дней назад линтер обновился до версии 2.0. Самое время попробовать!

➡️ Подробнее про инструмент

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰17👍4🔥32
📁 Работа с файлами в Go

В Go работа с файлами проста, но с подвохами. Если не закрыть файл — будет утечка ресурсов. Если не обработать ошибку — баг, который выстрелит через неделю. Если нет понимания, что делает os.Create, то можно потерять важные данные.

➡️ Освоить базу по файлам поможет это видео

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🥱2
Forwarded from Библиотека программиста | программирование, кодинг, разработка
👨🏻‍💻 Исследование IT-аудитории Proglib 2025: зарплаты, технологии, профессии

Кто такой современный разработчик в 2025 году? Актуальное исследование портрета IT-специалистов: зарплаты, технологии, специализации и демография разработчиков.

➡️ Вся статистика и детали — здесь

Библиотека программиста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🥱3😁1