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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
💡Аксиомы каналов Go: по мотивам статьи 2014 года от Dave Cheney

Каналы являются довольно простой концепцией, пока вы не столкнетесь с некоторыми менее интуитивно понятными поведениями каналов, особенно когда речь идет о закрытых или nil каналах.

1️⃣ Отправка в nil канал блокируется навсегда.
2️⃣ Чтение из nil канала блокируется навсегда.
3️⃣ Отправка в закрытый канал вызывает панику.
4️⃣ Чтение из закрытого канала возвращает нулевое значение.

#вопросы_с_собесов
👍23
🎲 bgammon — нарды в вашем браузере без рекламы и СМС

Это не только онлайн-версия классической игры, но и игра с открытым исходным кодом, написанная на Go с использованием Ebitengine.

👉 Посмотреть код: бэкэнд & фронт
👍26🤔5🌚2😁1
Вакансия: Java Software Engineer
Локация: удаленно

Bennudata — стартап, с инвестициями от университета Berkeley, мы строим новое решение для автоматизации процесса Disaster Recovery в public clouds (AWS, Azure, GCP).

Задачи:
▪️Проектирование, разработка и тестирование микросервисов
▪️Проектирование и реализация контрактов API
▪️Глубокое погружение в работу сервисов AWS

Требования:
▪️Практический опыт разработки на Java Core более 3-х лет
▪️Опыт работы с Spring Boot
▪️Знание и опыт работы с базами данных MongoDB
▪️Опыт работы с распределенными системами на основе GraphQL и gRPC
▪️Знание и опыт работы с AWS сервисами - EC2, RDS, IAM, S3, VPC, EKS, EBS, Lambda, SNS, SQS.
▪️Знание и использование AWS API и AWS CLI для автоматизации развертывания и управления приложениями на AWS.
▪️Опыт работы с Kubernetes
▪️Понимание и опыт работы с архитектурой микросервисов
▪️Навыки юнит-тестирования - умение писать и запускать автоматические тесты для проверки функциональности кода
▪️English - чтение документации
▪️Русский - разговорный

Желательно:
▪️Знание и опыт использования Terraform

Что мы предлагаем:
▪️3500$+
▪️Remote, full-time
▪️Опционная программа
▪️Возможность релокации в US (виза H-1B)

Резюме на dg@bennudata.com или t.me/gorbunov_me
🥱17🤔1🌚1
Интеграционное тестирование REST API на базе MongoDB с Go

Простой гайд с примерами на Go, который включает проектирование простого API и модели базы данных, описание эндпоинтов, разработку интеграционных тестов, использование Testcontainers и реализацию тестов на Go с использованием apitest.

👉 Читать
👍17
🧰 SCS — Go-библиотека для управления HTTP-сессиями в веб-приложениях от Alex Edwards. Недавно была выпущена версия 2.7.0.

📌 Основные возможности и преимущества:

Автоматическая загрузка и сохранение данных сессии через middleware: облегчает работу с сессиями, автоматизируя их управление.
Выбор из 19 различных серверных хранилищ сессий, включая PostgreSQL, MySQL, MSSQL, SQLite, Redis и многие другие. Также поддерживаются кастомные хранилища сессий.
Поддержка multiple sessions per request, 'flash' messages, session token regeneration, idle, absolute session timeouts и функционал «запомнить меня».
Простота расширения и настройки: возможность обмена токенами сессии с клиентами через HTTP-заголовки или тело запросов/ответов.
Эффективный дизайн: легковесная, быстрая и использует меньше памяти, чем gorilla/sessions.

👉 GitHub

#инструменты
👍74
🤔 Зачем писать свой велосипед? Возьми готовую либу и пользуйся! За тебя уже все написали

Вы наверняка слышали эту фразу от других разработчиков. Наличие инструмента/проекта/библиотеки для любой задачи — это одновременно как достоинство, так и недостаток современной разработки.

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

💬 А как в вашей команде обстоят дела со сторонними библиотеками? По каким критериям вы принимаете решение о внедрении их в проект?

#холивар
13👍1
🥵 7 типов «сложных» разработчиков

Как найти подход к таким «сложным» типам и сделать работу в команде более эффективной и приятной? Рассказываем в статье, как с ними работать, чтобы избежать конфликтов и достичь общих целей.

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

#почитать
👍3🔥1
💡Futures в Go — абстракция, представляющая результат асинхронной операции, который станет доступным в будущем.

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

1️⃣ Создаем канал, который будет содержать будущий результат:
resultChan := make(chan int)

2️⃣ Запускаем горутину для асинхронного вычисления результата:
go func() {
resultChan <- doLongComputation()
}()

3️⃣ Читаем из канала позже для получения результата:
result := <-resultChan
👍21🥱19
⚒️ Ants — библиотека, которая реализует высокопроизводительный пул горутин с фиксированной емкостью.

📌 Под капотом:

☑️ Автоматическое управление большим числом горутин
☑️ Периодическое удаление просроченных горутин
☑️ Расширенный API, включающий отправку задач, получение количества запущенных горутин, динамическую настройку емкости пула, освобождение и перезапуск пула
☑️ Обработка паник для предотвращения сбоев программ
☑️ Эффективное использование памяти
☑️ Неблокирующий механизм https://google.github.io/styleguide/go/index
🔥14🥱311👍1
Дженерики, добавленные в Go 1.18, стали самым большим нововведением с момента первого опенсорсного выпуска Go. На дворе почти 2024 год и Go 1.21.4.

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

#холивар
🥱127👍1
💡 Основная идея корутин — дать возможность выполнять что-то конкуретно, но не параллельно, а с блокированием и по запросу.

Расс Кокс писал о том, зачем нам нужен пакет coroutine для Go и как он будет выглядеть. А на Хабре недавно появился перевод его заметок👇

🔗 Читать
🤔6👍21🔥1
🤔 Кровать на заднем плане, человек, который ходит туда-обратно, и песня «Мой кот боится темноты». И всё это в первые две минуты. Как думаете, что это?

А это запись четырехчасового стрима для Go-разработчиков, на котором Vany Serezhkin пишет VPN на веб-сокетах 🤷‍♂️

😉 А вы думали, чем же заняться вечером в пятницу.
👍111
👨‍🏫Полезные каналы по Go

Напоминаем, что «Библиотека программиста» запустила два канала специально для Go-разработчиков и тех, кто хочет ими стать.

Подписывайтесь:
👉Библиотека собеса по Go — тут мы готовимся к интервью
👉Библиотека задач по Go — тут решаем задачи, проходим тесты и изучаем код
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
🎥 Дорожная карта по параллельному программированию: подробный план изучения от Владимира Балуна

📌 Что внутри:

00:34 — Основы исполнения кода
01:09 — Основы операционных систем
02:01 — Параллельное и конкурентное исполнение кода
02:42 — Примитивы синхронизации
03:45 — Основы архитектуры компьютера
04:06 — Атомики
04:51 — Проблемы параллельного программирования
05:23 — Продвинутые примитивы синхронизации
06:02 — Паттерны параллельного программирования
06:46 — Ввод-вывод
07:15 — Барьеры памяти
08:03 — Продвинутая архитектура компьютера
08:57 — Алгоритмы синхронизации
09:56 — Lock-free структуры данных
10:30 — Wait-free структуры данных
10:45 — Как изучать параллельное программирование
👍29🥱12
📊 Go Logging Benchmarks

Сравнение производительности популярных Go-библиотек логирования, включая пакет стандартной библиотеки slog.
🔥17👍3
River — надежная высокопроизводительная система обработки заданий для Go и Postgres, использующая преимущества дженериков.

🤩 River использует одну и ту же базы данных для данных приложения и очереди заданий. Помещая задания в очередь транзакций вместе с другими изменениями в базе данных, можно избежать целых классов проблем распределенных систем. Преимущества River отлично описаны в статье.

💡 River Client предоставляет интерфейс для добавления заданий и управления сервисами обработки и обслуживания заданий. Клиент создается с пулом базы данных, драйвером и структурой конфигурации, содержащей пакет Workers и другие настройки:

riverClient, err := river.NewClient(riverpgxv5.New(dbPool), &river.Config{
Queues: map[string]river.QueueConfig{
river.DefaultQueue: {MaxWorkers: 100},
},
Workers: workers,
})

if err != nil {
panic(err)
}

// Run the client inline. All executed jobs will inherit from ctx:
if err := riverClient.Start(ctx); err != nil {
panic(err)
}
👍101🔥1