
🌸 Майская распродажа
Скидки до 70% в каталоге + дополнительно 3,5% по промокоду HAPPYMAY
В каталог
32.1

Golang книги
5.0
15
Интернет технологии
466
11
Golang или GO язык программирования от google. Авторский канала с книгами GO, который содержит активную аудиторию GO разработчиков
Поделиться
В избранное
Купить рекламу в этом канале
Формат:
keyboard_arrow_down
- 1/24
- 2/48
- 3/72
- Нативный
- 7 дней
- Репост
1 час в топе / 24 часа в ленте
Количество:
keyboard_arrow_down
- 1
- 2
- 3
- 4
- 5
- 8
- 10
- 15
Стоимость публикации:
local_activity
12 303.48₽12 303.48₽local_mall
0.0%
Осталось по этой цене:0
Последние посты канала
imageИзображение не доступно для предпросмотра
💻Как работать с каналами в Go и сделать ваш код конкурентным?
🔥На открытом уроке «Использование каналов в Go на практике» от OTUS вы погрузитесь в одну из самых мощных особенностей языка Golang. Эти инструменты позволяют эффективно управлять параллельными процессами — ключ к созданию высокопроизводительных приложений.
❗️Что вас ждёт:
— Обзор теории: как работают каналы в Go и зачем они нужны.
— Практические примеры применения каналов в реальных задачах.
— Разбор частых ошибок и подводных камней при работе с каналами.
📗Урок пройдет в преддверии старта курса «Golang Developer. Professional», и все участники получат скидку на обучение.
➡️Встречаемся 14 мая в 20:00 МСК, регистрация открыта: https://otus.pw/DDMy/?erid=2W5zFJen29N
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
1728
10:54
13.05.2025
📚 Организация middleware в Go без сторонних зависимостей
Если ты пишешь веб-приложения на Go и хочешь избавиться от внешних зависимостей вроде
alice
, статья от Алекса Эдвардса — must read:
https://www.alexedwards.net/blog/organize-your-go-middleware-without-dependencies
📌 В чем суть:
• Проблема: стандартная библиотека Go не даёт удобного способа цепочечного подключения middleware
• Цель: избежать дублирования кода и сделать middleware масштабируемыми без сторонних пакетов
💡 Решение — создать собственный тип chain
, который позволяет «наматывать» middleware на обработчики:
type chain []func(http.Handler) http.Handler
func (c chain) then(h http.Handler) http.Handler {
for i := len(c) - 1; i >= 0; i-- {
h = c[i](h)
}
return h
}
func (c chain) thenFunc(h http.HandlerFunc) http.Handler {
return c.then(h)
}
{}
Теперь ты можешь описывать цепочки middleware так:
mux := http.NewServeMux()
baseChain := chain{requestID, logRequest}
adminChain := append(baseChain, authenticateUser, requireAdminUser)
mux.Handle("GET /", baseChain.thenFunc(home))
mux.Handle("GET /admin", adminChain.thenFunc(showAdminDashboard))
{}
Этот подход:
• Простой
• Без зависимостей
• Легко расширяется
Полная статья и объяснения тут:
@golang_books1928
16:01
12.05.2025
imageИзображение не доступно для предпросмотра
🤖 Хотите создать Telegram-бота с нуля на Go?
📅 13 мая в 20:00 МСК на открытом вебинаре мы разберем, как создать простого, но эффективного Telegram-бота для управления задачами, а также заложим правильную архитектуру для его дальнейшего расширения.
❗️Что разберем:
— Принципы разработки Telegram-ботов на Go.
— Архитектуру и структуры данных.
— Реализацию минимального набора функций для бота.
➡️ Открытый урок проходит в преддверие старта курса «Go (Golang) Developer Basic». Все участники получат скидку на обучение. Запишитесь прямо сейчас: https://otus.pw/YN3q/?erid=2W5zFGcAg7r
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
1812
15:03
12.05.2025
imageИзображение не доступно для предпросмотра
🛠 Массовая конвертация изображений с использованием Go и параллелизма
🔍 Проблема
• При запуске маркетплейса векторных изображений [Vectopus.com](https://vectopus.com) разработчики забыли реализовать поддержку формата WebP
• Это ухудшало SEO и замедляло загрузку страниц
• Нужно было конвертировать 500 000+ SVG-файлов в WebP _ретроспективно_
⚙️ Решение: CLI-инструмент на Go
Создан инструмент на Go, обрабатывающий SVG-файлы в несколько этапов:
1. Загрузка SVG из Amazon S3
2. Конвертация в PNG
3. Добавление водяного знака (опционально)
4. Конвертация PNG в WebP
5. Загрузка WebP обратно в S3
6. Обновление метаданных в PostgreSQL
7. Удаление временных файлов
⏱ Задача, рассчитанная на несколько дней, была выполнена за несколько часов.
🗃 Архитектура хранилища
• Все изображения — в Amazon S3 (SVG — приватный бакет, PNG — публичный)
• Метаданные — в PostgreSQL с полиморфными связями
• Новые загрузки обрабатываются через SQS + Lambda + EventBridge
✅ Выводы
• Использование Go дало высокую производительность при низких издержках
• Масштабируемость и надёжность решения
• Параллелизм Go отлично подходит для batch-обработки медиа
📖 Подробнее
1884
10:03
12.05.2025
imageИзображение не доступно для предпросмотра
Отлично знаете Go? Пройдите онлайн-собеседования за один день и присоединяйтесь к масштабному проекту по переносу ВКонтакте на сервисную архитектуру и новый технологический стек. Это VK One Day Offer для Go-разработчиков с опытом от трёх лет!
Зачем участвовать? Чтобы поработать с продуктами, которые выдерживают нагрузку свыше 2 млн RPS, стать частью команды с активно растущим Go-сообществом и собственным тулингом, работать над сложными архитектурными задачами и возможность влиять на то, каким станет ВКонтакте в ближайшие годы.
ВКонтакте переходит на сервисную архитектуру и строит единую платформу разработки на Go. Не упустите шанс участвовать в проекте, который упростит совершенствование продуктов VK и улучшит опыт миллионов пользователей.
Оставляйте заявку на участие.
2015
08:04
12.05.2025
imageИзображение не доступно для предпросмотра
🛠 Создание собственного ResponseWriter: безопасный HTTP в Go
*Автор: Антонио Питаси*
*Источник: [anto.pt](https://anto.pt/articles/go-http-responsewriter)*
📌 Основная идея
В Go интерфейс
http.ResponseWriter
напрямую записывает данные в сокет, что может приводить к незаметным ошибкам:
• Забывание установки кода состояния ответа.
• Попытка изменить заголовки после начала записи (это не вызовет ошибок, но и не сработает).
• Продолжение выполнения обработчика даже после ошибок, что может повлиять на корректность ответа.
➡ Решение: создать собственную обёртку для ResponseWriter
, чтобы добавить проверки и сделать обработку HTTP-запросов более безопасной и предсказуемой.
⚠️ Проблемы стандартного ResponseWriter
1️⃣ Автоматическая установка кода состояния:
Go сам устанавливает код 200 OK при первом вызове Write()
, если вы забыли явно вызвать WriteHeader()
. Это скрывает ошибки.
2️⃣ Изменение заголовков после начала записи:
После начала отправки тела ответа заголовки нельзя изменить. Go не сигнализирует об этом явно.
3️⃣ Выполнение после ошибок:
Обработчик продолжает выполнение даже после отправки ошибки, если вы забыли поставить return
.
## 🧱 Пример реализации обёртки
type HttpWriter struct {
w http.ResponseWriter
headerWritten bool
statusCode int
}
func NewHttpWriter(w http.ResponseWriter) http.ResponseWriter {
return &HttpWriter{w: w}
}
func (w *HttpWriter) Header() http.Header {
return w.w.Header()
}
func (w *HttpWriter) WriteHeader(statusCode int) {
w.w.WriteHeader(statusCode)
w.headerWritten = true
w.statusCode = statusCode
}
func (w *HttpWriter) Write(data []byte) (int, error) {
if !w.headerWritten {
log.Println("⚠️ Предупреждение: Write() вызван без предварительного WriteHeader()")
}
if w.statusCode >= 500 {
log.Println("⚠️ Статус 500: запись игнорируется")
return 0, nil
}
return w.w.Write(data)
}
{}
## 🔄 Интеграция через middleware
Чтобы все обработчики автоматически использовали новый HttpWriter
, можно внедрить его через middleware:
func middleware(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
writer := NewHttpWriter(w)
h.ServeHTTP(writer, r)
})
}
{}
✅ Преимущества
• Явное требование установки кода состояния.
• Логирование попыток записи без WriteHeader()
.
• Блокировка записи при статусах >=500 для предотвращения некорректного ответа.
• Улучшенная предсказуемость и безопасность обработки HTTP-запросов.
🔗 Подробнее в оригинальной статье2148
10:06
10.05.2025
👣 Graceful Shutdown in Go
Любое приложение должно при завершении работы:
1. Закрыть точку входа (HTTP-сервер, очередь сообщений и т.д.), но сохранить исходящие соединения (БД, кэш) активными.
2. Дождаться окончания всех текущих запросов, и при превышении допустимого времени вернуть корректную ошибку.
3. Освободить критические ресурсы (соединения с БД, файловые блокировки, слушатели). :contentReference[oaicite:0]{index=0}
## 1. Обработка сигналов
В Unix-системах сигналы (`SIGTERM`, SIGINT, SIGHUP`) — это программные прерывания, уведомляющие процесс о необходимости завершения или перезагрузки конфигурации. По умолчанию Go-рантайм ловит многие сигналы, но для «мягкой» остановки обычно интересуют только `SIGTERM и SIGINT. :contentReference[oaicite:1]{index=1}
func main() {
// 1) Создаем канал для сигналов
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
// 2) Запускаем сервер и другую работу здесь...
// 3) Ждем сигнала
<-signalChan
fmt.Println("Received termination signal, shutting down…")
}{}
2. Таймаут для завершения
В Kubernetes по умолчанию даётся 30 секунд на грациозную остановку (terminationGracePeriodSeconds). Хорошей практикой является резервирование 20 % времени (примерно 6 секунд) на «подстраховку» завершения.
timeout := 25 * time.Second
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
log.Fatalf("Server forced to shutdown: %v", err)
}{}
3. Остановка приёма новых запросов
Метод http.Server.Shutdown закрывает слушатели и не принимает новые соединения, при этом дожидаясь окончания активных хэндлеров. Однако в контейнеризированных окружениях нужно сначала «провалить» readiness-пробу, чтобы снять под из балансировщика, и только затем вызывать Shutdown.
VictoriaMetrics
var shuttingDown atomic.Bool
http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
if shuttingDown.Load() {
w.WriteHeader(http.StatusServiceUnavailable)
return
}
w.WriteHeader(http.StatusOK)
})
// При получении сигнала:
shuttingDown.Store(true)
// Ждем несколько секунд, пока traffic прекратится
time.Sleep(5 * time.Second)
server.Shutdown(ctx){}
4. Обработка активных запросов
После вызова Shutdown(ctx) сервер ждет либо завершения всех соединений, либо истечения контекста. Чтобы уведомить свои хэндлеры о «скоро закрытии», используйте контекст:
a) Middleware с каналом отмены
func WithGracefulShutdown(next http.Handler, cancelCh <-chan struct{}) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx, cancel := WithCancellation(r.Context(), cancelCh)
defer cancel()
next.ServeHTTP(w, r.WithContext(ctx))
})
}{}
b) BaseContext для всего сервера
ongoingCtx, cancelFn := context.WithCancel(context.Background())
server := &http.Server{
Addr: ":8080",
Handler: yourHandler,
BaseContext: func(_ net.Listener) context.Context { return ongoingCtx },
}
// После готовности к остановке:
cancelFn()
VictoriaMetrics{}
5. Освобождение ресурсов
Не закрывайте ресурсы сразу при получении сигнала — хэндлеры могут ими ещё пользоваться. Лучше дождаться окончания работы (или таймаута), а затем в обратном порядке инициализации вызвать Close. Стандартный приём в Go — defer:
db := connectDB()
defer db.Close()
cache := connectCache()
defer cache.Close()
{}
ОС сама освободит память и файловые дескрипторы при завершении процесса, но для внешних систем (БД, брокеры сообщений) рекомендуются явные Close()/Flush() для корректного завершения транзакций и избежания потерь данных.
VictoriaMetrics
➡️ Таким образом, грациозная остановка Go-приложения сводится к трём шагам:
- Ловим нужные сигналы и переключаемся на собственную логику.
- Останавливаем приём новых запросов через Shutdown и/или провал readiness-пробы.
- Ждём завершения активных запросов в пределах таймаута и закрываем ресурсы в обратном порядке.
@golang_books2000
13:00
02.05.2025
imageИзображение не доступно для предпросмотра
👣 “Cheating the Reaper in Go” от Miguel Young
В этой подробной статье автор показывает, как «обмануть» сборщик мусора Go и создать свой собственный arena-аллокатор на чистом Go, получая существенный прирост производительности.
📌 Что внутри:
- Краткий обзор GC Go: как используются pointer bits и shapes для точного сбора мусора.
- Реализация простого bump-аллокатора Arena, сводящего Alloc к смещению указателя.
- Бенчмарки: до 2×–4× ускорения при малых аллокациях и почти 7× для массивов из 64 элементов ( arena – 7370 MB/s vs new – 2865 MB/s )
mcyoung.xyz
.
- Оптимизация через sync.Pool и финализаторы для повторного использования и ускоренного обнуления памяти.
- Безопасный метод Reset() для мгновенной очистки арены без дорогостоящего выделения заново.
Заготовка примитивного Realloc(), позволяющая расширять последние аллокации «на месте».
Полный код, подробное объяснение и советы по дальнейшим оптимизациям — по ссылке:
https://mcyoung.xyz/2025/04/21/go-arenas/
@golang_books
2052
09:29
25.04.2025
imageИзображение не доступно для предпросмотра
🔎 Ищете способ погрузиться в мир разработки на Go? Хотите создать свой первый мессенджер с использованием брокера сообщений NATS?
📆 На открытом вебинаре 29 апреля в 20:00 мск вы научитесь работать с NATS — брокером сообщений, который идеально подходит для построения масштабируемых и высокопроизводительных приложений. Мы разберем все необходимые шаги, начиная от создания простого чат-радио до работы с многопоточностью и каналами в Go.
🎓 Вы освоите ключевые навыки работы с потоками ввода/вывода, научитесь строить многопоточный код на Go.
➡️ Зарегистрируйтесь и получите скидку на обучение «Go (Golang) Developer Basic»: https://otus.pw/Ne88/?erid=2W5zFJM2Wkg
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
1981
07:26
25.04.2025
imageИзображение не доступно для предпросмотра
📝 Как создать API на Go с помощью Huma
📈 Пошаговое руководство от Zuplo (апрель 2025)
1. Создание проекта на Go с Huma (OpenAPI + валидация + структуры данных)
2. Интеграция с MongoDB
3. Запуск локального API
4. Деплой API
5. Создание и управление через Zuplo
6. Аутентификация через API-ключи
✅ Huma — минималистичный Go-фреймворк с автоматической OpenAPI-спецификацией и удобной валидацией
📚 Читать: How to Build an API with Go and Huma
@golang_books
2093
12:30
24.04.2025
close
С этим каналом часто покупают
Отзывы канала
keyboard_arrow_down
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
5.0
0 отзыва за 6 мес.
y
**-main-ita@******.ru
на сервисе с октября 2023
18.10.202409:19
5
Оперативное размещение
Показать еще
Новинки в тематике
Лучшие в тематике
Статистика канала
Рейтинг
32.1
Оценка отзывов
5.0
Выполнено заявок
77
Подписчики:
16.2K
Просмотры на пост:
lock_outline
ER:
--%
Публикаций в день:
0.0
CPV
lock_outlineВыбрано
0
каналов на сумму:0.00₽
Подписчики:
0
Просмотры:
lock_outline
Перейти в корзинуКупить за:0.00₽
Комментарий