Библиотека 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
🔧 Быстрый способ конвертации JSON в Go-структуры

Нашли для вас удобный проект, который конвертирует JSON в структуры Go.

Как это выглядит

1️⃣ Вставляем свой JSON в форму на странице
{
"name": "Prog Lib",
"age": 30,
"email": "[email protected]",
"is_active": true,
"tags": ["golang", "developer"],
"profile": {
"github": "https://github.com/proglib"
}
}


2️⃣ На выходе получаем готовую структуру
type AutoGenerated struct {
Name string `json:"name"`
Age int `json:"age"`
Email string `json:"email"`
IsActive bool `json:"is_active"`
Tags []string `json:"tags"`
Profile struct {
Github string `json:"github"`
} `json:"profile"`
}


Инструмент не без ошибок, но отлично работает в 99% случаев.

➡️ Попробовать JSON-to-Go

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👾3👍21
А чего в Go не хватает вам 💬

🐸Библиотека Go разработчика #развлекалово
Please open Telegram to view this post
VIEW IN TELEGRAM
😁67🥰3🌚1
Чек-лист: отправка кода на ревью

Прежде чем звать старшего коллегу для проверки кода пройдись по этому списку 👇

📌 Общее
✓ Код компилируется и проходит все необходимые тесты.
✓ В коде нет отладочных выводов в консоль.
✓ Отсутствуют «магические числа» (используются константы)
✓ Нет дублирования кода.
✓ Код не похож на «простыню», строки методов не исчисляются сотнями.

🛠 Функциональность
✓ Код делает именно то, что заявлено в задаче / тикете.
✓ Проверены граничные случаи.
✓ Обработаны возможные исключения.
✓ При ошибках возвращаются понятные сообщения и коды.

🚀 Производительность
✓ Код не создает лишних объектов.
✓ Нет ненужных синхронизаций и блокировок.
✓ Если есть циклы в циклах — подумать дважды, нельзя ли их убрать.

🧹 Чистота и поддерживаемость
✓ Минимальная вложенность (if-else не превращается в лабиринт)
✓ Код понятен без лишних комментариев
✓ Если добавлен новый код – он покрыт тестами
✓ Нет «зомби-кода» (закомментированных кусков, которые «может быть пригодятся»)

🧪 Тестирование
✓ Все тесты проходят до отправки на ревью
✓ Покрытие юнит-тестами достаточное, основные сценарии проверены
✓ Не тестируем очевидное (getter/setter, toString())

🔗 Git и процесс ревью
✓ Название ветки соответствует принятому стандарту (feature/, bugfix/, hotfix/)
✓ Коммиты логичны и атомарны (не «все в одном»)
✓ Сообщения коммитов осмысленные, а не «fixed bug» или «changes»

Отправляй на ревью и пусть только попробуют найти изъяны!

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍12🤔5😁4🔥2
Эксперт или универсал: Какой путь выбрать

Однажды каждый разработчик сталкивается с выбором:

💡 Идти вглубь — становиться узким специалистом, глубоким экспертом в конкретной технологии.
💡 Идти вширь — осваивать новые технологии, расширять кругозор, становиться универсалом.

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

Путь эксперта

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

Плюсы:
✓ Высокий спрос на рынке для редких экспертов.
✓ Возможность стать ментором, архитектором, техлидом.
✓ Возможность делать революционные вещи в узкой области.

Минусы:
— Высокий порог входа: чтобы стать экспертом, нужны годы практики.
— Узкая специализация = риски (если технология потеряет актуальность).
— Иногда скучно: одно и то же из года в год.

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

Путь универсала

Ты не привязываешься к одной технологии и легко прыгаешь между разными стеками. Сегодня фронтенд, завтра DevOps, послезавтра AI — ты всегда готов учиться новому.

Плюсы:
✓ Легче адаптироваться к новым трендам и рынку.
✓ Возможность работать в разных областях.
✓ Больше шансов занять менеджерские позиции.
✓ Можно быть разработчиком-одиночкой (фриланс, стартапы, консалтинг).

Минусы:
— Поверхностные знания = не всегда высокая зарплата.
— Риски синдрома "немного знаю обо всём, но нигде не силён".
— Постоянная учёба: новые фреймворки, языки, подходы... устаёшь от потока информации.

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

Давайте обсудим в комментариях какой путь выбрали вы или хотели бы выбрать 👇

🐸Библиотека Go разработчика #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱11👍7🔥4🤔41
🎥 Что посмотреть: как Go улучшает производительность компилятора TypeScript

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

Команда разработчиков TypeScript делится опытом переноса компилятора с использованием Go. Это позволяет сократить время компиляции в десятки раз и решает множество проблем с производительностью в JavaScript.

➡️ Смотреть видео

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32👾2🔥1
Нужна ли математика программисту

Можно ли стать разработчиком, если в школе ненавидел математику? А если наоборот — тащился от алгебры и геометрии, но кодить не умеешь? Эта статья раскладывает всё по полочкам: где без математики никуда, а где можно и без неё.

➡️ Что внутри:

✓ Почему все считают, что программисты — математики

✓ В каких сферах разработки можно вообще не знать математику

✓ Где хватит готовых библиотек, а где придётся разбираться в формулах

✓ Какие области программирования требуют мощного математического бэкграунда

✓ Что делать, если математика — это боль, но хочется освоить ML или Data Science

✓ Топ книг, которые помогут понять и даже полюбить математику

🔵 Чтобы знать математику, забирайте наш курс → «Математика для Data Science»

📎 Читать статью

Proglib Academy
Please open Telegram to view this post
VIEW IN TELEGRAM
2🤔2😢1👾1
🔥 Go и дженерики: спасение или катастрофа

Давайте поговорим о самой противоречивой фиче последних лет – дженериках.

Go 1.18 принес нам дженерики, и с тех пор сообщество разделилось на два лагеря:

«Это было необходимо!» – наконец-то можно писать более чистый и переиспользуемый код. Ad-hoc-полиморфизм не всегда удобен, а interface{} и рефлексия – зло.

«Go потерял свою простоту!» – дженерики убили лаконичность кода. Вместо понятного Go мы получили мини-Java.

💭 Согласны ли вы с тем, что дженерики спасли Go, или же это был шаг в сторону усложнения?

🐸Библиотека Go разработчика #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱7
📰 Новости минувшей недели

Подводим итоги всего, что случилось за эти 7 дней:

🎧 Новый выпуск подкаста Cup o' Goобсуждаются релизы безопасности Go 1.24.1 и 1.23.7, обновление gopls v0.18.0, а также инициативы по переписыванию проектов на Go.

🐍 Релиз Viper v1.20.0 — улучшены API поиска файлов, добавлена поддержка привязки структур. Также прекращена поддержка Go 1.20, а устаревший slog shim удалён для упрощения кода.

🌚 Go 1.24 получил новый API — теперь разработчики могут задавать корневую директорию, ограничивая доступ приложения к файловой системе и повышая безопасность.

⚙️ Microsoft переписывает компилятор TypeScript на Go

🐸Библиотека Go разработчика #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
👨‍💻 Продвинутые трюки со слайсами

Собрали для вас парочку идей как необычно работать со слайсами:

1️⃣ Удаление элемента без сохранения порядка
s[i] = s[len(s)-1]
s = s[:len(s)-1]


2️⃣Фильтрация слайса без выделения памяти
n := 0
for _, x := range s {
if keep(x) {
s[n] = x
n++
}
}
s = s[:n]


3️⃣ Расширение слайса без перевыделения памяти
if cap(s)-len(s) < n {
s = append(make([]int, 0, len(s)+n), s...)
}


🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23😁4👍21
Какой тип данных получит переменная var x = 42.5

👻 — int
🌚 — float32
⚡️ — float64
🎉 — double

🐸Библиотека задач по Go
Please open Telegram to view this post
VIEW IN TELEGRAM
215🌚15😁9🎉3👾3
🔑 Меньше запросов, больше скорости

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

Valet Key Pattern

1️⃣ Клиент запрашивает доступ к ресурсу.

2️⃣ Сервер выдает временный токен («valet key») с ограниченными правами.

3️⃣ Клиент напрямую использует этот токен для доступа к данным

Где используется

• Доступ к объектному хранилищу (AWS S3 Pre-Signed URLs, Azure SAS Tokens)

• Ограниченный доступ к API без полной аутентификации

• Стриминг медиафайлов с временными ссылками

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

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🐧 Пингвин, покоривший мир: история взлета Linux – ОС, управляющей 96% серверов

В 1991 году на компьютере с 4 мегабайтами памяти родилась программа, которая сегодня управляет большей частью интернета, смартфонами и даже космическими аппаратами. Это история Linux, рассказанная одним из первых свидетелей.

➡️ Читать статью
➡️ Зеркало
👍153😁3
Media is too big
VIEW IN TELEGRAM
🧑‍💻 Какой язык программирования учить в 2025 году

Proglib рассказывает базу в формате рилса
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱24👍8
📝 Интерактивная шпаргалка по 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