Forwarded from Golang
📊 Высокопроизводительная библиотека логирования для Go 🚀
mtlog — это библиотека структурированного логирования для Go, вдохновленная Serilog. Она обеспечивает нулевые аллокации для простых операций логирования и поддерживает мощные функции для сложных сценариев, включая шаблоны сообщений и совместимость с OpenTelemetry.
🚀Основные моменты:
- Нулевые аллокации для простых сообщений
- Поддержка шаблонов сообщений и Go синтаксиса
- Интеграция с Kubernetes и OpenTelemetry
- Многофреймворковая поддержка для HTTP
- Расширенные стратегии выборки и маршрутизации логов
📌 GitHub: https://github.com/willibrandon/mtlog
@golang_google
#golang
mtlog — это библиотека структурированного логирования для Go, вдохновленная Serilog. Она обеспечивает нулевые аллокации для простых операций логирования и поддерживает мощные функции для сложных сценариев, включая шаблоны сообщений и совместимость с OpenTelemetry.
🚀Основные моменты:
- Нулевые аллокации для простых сообщений
- Поддержка шаблонов сообщений и Go синтаксиса
- Интеграция с Kubernetes и OpenTelemetry
- Многофреймворковая поддержка для HTTP
- Расширенные стратегии выборки и маршрутизации логов
📌 GitHub: https://github.com/willibrandon/mtlog
@golang_google
#golang
👍4❤2🔥2
📦 Для Go появился лёгкий и удобный инструмент для событийной архитектуры
signals — это минималистичная библиотека без зависимостей, которая реализует простой pub-sub механизм для ваших Go-приложений.
Особенности:
- никаких внешних зависимостей
- тонкий и понятный API
- удобный in-process event system
Репозиторий: https://github.com/maniartech/signals
#golang
signals — это минималистичная библиотека без зависимостей, которая реализует простой pub-sub механизм для ваших Go-приложений.
Особенности:
- никаких внешних зависимостей
- тонкий и понятный API
- удобный in-process event system
Репозиторий: https://github.com/maniartech/signals
#golang
👍14🔥6❤1
Graceful Shutdowns в Go HTTP-серверах: как обеспечить 0 простоев при живом трафике
Graceful shutdown - это “прощание с клиентами”, когда сервер:
- перестаёт принимать новые запросы
- даёт завершиться текущим запросам
- чистит ресурсы (базы, файлы и т.д.)
- и только потом закрывается
Зачем это нужно:
Если просто “убить” сервер:
- запросы могут оборваться на полпути (например, оплата)
- пользователи получат ошибки или потеряют данные
- могут остаться “висячие” соединения и утечки ресурсов
Graceful shutdown решает это, особенно важно при деплое, перезагрузках, работе в Kubernetes/Docker.
# Как это сделать в Go
1. Использовать
2. Перехватывать сигналы ОС (`SIGINT`,
3. Использовать
4. Корректно закрывать ресурсы: БД, логи, файлы и т.д.
# Пример кода
Вывод
- Graceful shutdown — не просто “красивость”, а необходимая практика для надёжных Go-сервисов:
- минимизирует потери данных и ошибок для пользователей
- обеспечивает корректное завершение внутренних операций
- делает деплой и перезапуск безопасными и незаметными
https://blog.stackademic.com/graceful-shutdowns-in-go-http-servers-ensuring-zero-downtime-for-live-traffic-b8224b28ab4a
Graceful shutdown - это “прощание с клиентами”, когда сервер:
- перестаёт принимать новые запросы
- даёт завершиться текущим запросам
- чистит ресурсы (базы, файлы и т.д.)
- и только потом закрывается
Зачем это нужно:
Если просто “убить” сервер:
- запросы могут оборваться на полпути (например, оплата)
- пользователи получат ошибки или потеряют данные
- могут остаться “висячие” соединения и утечки ресурсов
Graceful shutdown решает это, особенно важно при деплое, перезагрузках, работе в Kubernetes/Docker.
# Как это сделать в Go
1. Использовать
http.Server.Shutdown(ctx)
- сервер перестаёт принимать новые запросы, но завершает текущие в рамках таймаута. 2. Перехватывать сигналы ОС (`SIGINT`,
SIGTERM`) через `os/signal
, чтобы начать shutdown. 3. Использовать
context.WithTimeout
, чтобы ограничить время завершения. 4. Корректно закрывать ресурсы: БД, логи, файлы и т.д.
# Пример кода
package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"time"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
time.Sleep(3 * time.Second)
w.Write([]byte("Request done"))
})
server := &http.Server{
Addr: ":8080",
Handler: mux,
}
go func() {
log.Println("Server starting on :8080")
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("ListenAndServe error: %v", err)
}
}()
stop := make(chan os.Signal, 1)
signal.Notify(stop, os.Interrupt, os.Kill)
<-stop
log.Println("Shutting down server...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
log.Fatalf("Forced shutdown: %v", err)
}
log.Println("Server exited gracefully")
}
Вывод
- Graceful shutdown — не просто “красивость”, а необходимая практика для надёжных Go-сервисов:
- минимизирует потери данных и ошибок для пользователей
- обеспечивает корректное завершение внутренних операций
- делает деплой и перезапуск безопасными и незаметными
https://blog.stackademic.com/graceful-shutdowns-in-go-http-servers-ensuring-zero-downtime-for-live-traffic-b8224b28ab4a
❤21👍14
ХОЧЕШЬ ПОВЫСИТЬ ГРЕЙД В 2025 ГОДУ? 🚀
Если:
— код разваливается от правок,
— бизнес-логика размазана,
— Entity — просто структуры,
— а тесты живут своей жизнью —
вам точно сюда.
📦 Научитесь строить архитектуру, устойчивую к изменениям.
Что будет на обучении?
✅ Создадим полноценный микросервис
✅ Разберем все тактические паттерны DDD
✅ Реализуем Use Case и Domain Service
✅ Напишем много тестов
✅ Реализуем HTTP, gRPC и Kafka адаптеры
📢 Повышайте свою ценность, как специалиста, прямо сейчас👉 https://microarch.ru/courses/ddd/languages/go?utm_source=posev&utm_medium=erid:2Vtzqvvi8v1&utm_campaign=5
Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2Vtzqvvi8v1
Если:
— код разваливается от правок,
— бизнес-логика размазана,
— Entity — просто структуры,
— а тесты живут своей жизнью —
вам точно сюда.
📦 Научитесь строить архитектуру, устойчивую к изменениям.
Что будет на обучении?
✅ Создадим полноценный микросервис
✅ Разберем все тактические паттерны DDD
✅ Реализуем Use Case и Domain Service
✅ Напишем много тестов
✅ Реализуем HTTP, gRPC и Kafka адаптеры
📢 Повышайте свою ценность, как специалиста, прямо сейчас👉 https://microarch.ru/courses/ddd/languages/go?utm_source=posev&utm_medium=erid:2Vtzqvvi8v1&utm_campaign=5
Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2Vtzqvvi8v1
🤬5❤2
💡 Структуры в Go: под капотом они интереснее, чем кажется
На первый взгляд
- Почему структура занимает больше памяти, чем сумма её полей?
- Почему одни структуры можно сравнивать и использовать как ключ в
🗄️ Память, выравнивание и паддинг
Go хранит поля в памяти в порядке объявления. Чтобы данные были выровнены по границам процессора, компилятор добавляет "пустые байты" — padding.
Хотя тут одинаково, в больших структурах порядок полей может сэкономить десятки байт.
👉 Лайфхак: ставьте "тяжёлые" типы (int64, float64) выше "лёгких" (bool, byte), чтобы сократить паддинг.
⚖️ Сравнимость и ключи в map
Структуры можно сравнивать (==) и использовать как ключи в map, если все поля сравнимые.
✅ Как обойти:
Использовать фиксированный массив:
Или хранить хэш (uint64, строка) вместо самого среза.
📌 Вывод: структуры в Go — это не только про хранение данных. Зная про выравнивание и правила сравнимости, можно писать код, который будет и эффективным по памяти, и удобным в работе с map.
#golang #struct #memory #map
На первый взгляд
struct
— это просто контейнер с полями. Но стоит углубиться, и появляются вопросы: - Почему структура занимает больше памяти, чем сумма её полей?
- Почему одни структуры можно сравнивать и использовать как ключ в
map
, а другие — нет? 🗄️ Память, выравнивание и паддинг
Go хранит поля в памяти в порядке объявления. Чтобы данные были выровнены по границам процессора, компилятор добавляет "пустые байты" — padding.
type A struct {
B bool // 1 byte (+7 padding)
I int64 // 8 bytes
}
// Sizeof(A) = 16
type B struct {
I int64 // 8 bytes
B bool // 1 byte (+7 padding)
}
// Sizeof(B) = 16
Хотя тут одинаково, в больших структурах порядок полей может сэкономить десятки байт.
👉 Лайфхак: ставьте "тяжёлые" типы (int64, float64) выше "лёгких" (bool, byte), чтобы сократить паддинг.
⚖️ Сравнимость и ключи в map
Структуры можно сравнивать (==) и использовать как ключи в map, если все поля сравнимые.
type KeyGood struct {
ID int
Name string
}
// сравнимо, работает как ключ
type KeyBad struct {
Data []byte
}
// ошибка: []byte несравнимый тип
✅ Как обойти:
Использовать фиксированный массив:
type KeyArr struct { Digest [16]byte }
Преобразовать срез в строку:
key := string(digestBytes)
m := map[string]string{key: "value"}
Или хранить хэш (uint64, строка) вместо самого среза.
📌 Вывод: структуры в Go — это не только про хранение данных. Зная про выравнивание и правила сравнимости, можно писать код, который будет и эффективным по памяти, и удобным в работе с map.
#golang #struct #memory #map
❤18🔥8👍5🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
Говорят, что в VK есть код, который не падает даже в понедельник утром. Хотите узнать, как разработчики из VK этого добиваются?
Подписывайтесь на канал Backend VK Hub: тут кухня высоких нагрузок, новые подходы и честные разговоры с инженерами.
Подписывайтесь на канал Backend VK Hub: тут кухня высоких нагрузок, новые подходы и честные разговоры с инженерами.
😁19❤13🔥7👍3🤔1🤩1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥6🥰1
Шпаргалка_по_командам_Linux_для_среднего_и_продвинутого_уровня_1.pdf
149.2 KB
Сохраняйте себе, чтобы не потерять
📌 Полная версия онлайн
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤1🤔1
🔥 Успех в IT = скорость + знания + окружение
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
AI: https://t.iss.one/+EPEFXp67QfIyMjMy
Python: https://t.iss.one/+cq7O4sOHldY1ZTIy
Linux: t.iss.one/linuxacademiya
Собеседования DS: t.iss.one/machinelearning_interview
C++ t.iss.one/cpluspluc
Docker: t.iss.one/DevopsDocker
Хакинг: t.iss.one/linuxkalii
Devops: t.iss.one/DevOPSitsec
Data Science: t.iss.one/data_analysis_ml
Javascript: t.iss.one/javascriptv
C#: t.iss.one/csharp_1001_notes
Java: t.iss.one/java_library
Базы данных: t.iss.one/sqlhub
Python собеседования: t.iss.one/python_job_interview
Мобильная разработка: t.iss.one/mobdevelop
Golang: t.iss.one/Golang_google
React: t.iss.one/react_tg
Rust: t.iss.one/rust_code
ИИ: t.iss.one/vistehno
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Frontend: t.iss.one/front
Big Data: t.iss.one/bigdatai
МАТЕМАТИКА: t.iss.one/data_math
Kubernets: t.iss.one/kubernetc
Разработка игр: https://t.iss.one/gamedev
Haskell: t.iss.one/haskell_tg
Физика: t.iss.one/fizmat
💼 Папка с вакансиями: t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.iss.one/memes_prog
🇬🇧Английский: t.iss.one/english_forprogrammers
🧠ИИ: t.iss.one/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.iss.one/addlist/BkskQciUW_FhNjEy
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
Здесь ты найдёшь всё это — коротко, по делу и без воды.
Пока другие ищут, где “подглядеть решение”, ты уже используешь самые свежие инструменты!
AI: https://t.iss.one/+EPEFXp67QfIyMjMy
Python: https://t.iss.one/+cq7O4sOHldY1ZTIy
Linux: t.iss.one/linuxacademiya
Собеседования DS: t.iss.one/machinelearning_interview
C++ t.iss.one/cpluspluc
Docker: t.iss.one/DevopsDocker
Хакинг: t.iss.one/linuxkalii
Devops: t.iss.one/DevOPSitsec
Data Science: t.iss.one/data_analysis_ml
Javascript: t.iss.one/javascriptv
C#: t.iss.one/csharp_1001_notes
Java: t.iss.one/java_library
Базы данных: t.iss.one/sqlhub
Python собеседования: t.iss.one/python_job_interview
Мобильная разработка: t.iss.one/mobdevelop
Golang: t.iss.one/Golang_google
React: t.iss.one/react_tg
Rust: t.iss.one/rust_code
ИИ: t.iss.one/vistehno
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Frontend: t.iss.one/front
Big Data: t.iss.one/bigdatai
МАТЕМАТИКА: t.iss.one/data_math
Kubernets: t.iss.one/kubernetc
Разработка игр: https://t.iss.one/gamedev
Haskell: t.iss.one/haskell_tg
Физика: t.iss.one/fizmat
💼 Папка с вакансиями: t.iss.one/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy
😆ИТ-Мемы: t.iss.one/memes_prog
🇬🇧Английский: t.iss.one/english_forprogrammers
🧠ИИ: t.iss.one/vistehno
🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://t.iss.one/addlist/BkskQciUW_FhNjEy
Подпишись, если хочешь быть в числе тех, кого зовут в топовые проекты!
❤1😁1
Профессиональный гайд по работе с ChatGPT (2025)
Как использовать ChatGPT не просто как «умного собеседника», а как полноценного помощника для программирования, маркетинга, аналитики и обучения?
Мы разберём, какие версии модели существуют, какие плагины открывают новые возможности, как строить промпты так, чтобы получать точные и полезные ответы, и как интегрировать ChatGPT в рабочие процессы.
Если у вас нет доступа к chatgpt можете использовать бесплатного бота в телеге, чтобы потестить все техники из статьи или воспользоваться обычной версией с помощью всем известного обхода блокировки.
Не будем тянуть время, Поехали!
📌 Гайд
Как использовать ChatGPT не просто как «умного собеседника», а как полноценного помощника для программирования, маркетинга, аналитики и обучения?
Мы разберём, какие версии модели существуют, какие плагины открывают новые возможности, как строить промпты так, чтобы получать точные и полезные ответы, и как интегрировать ChatGPT в рабочие процессы.
Если у вас нет доступа к chatgpt можете использовать бесплатного бота в телеге, чтобы потестить все техники из статьи или воспользоваться обычной версией с помощью всем известного обхода блокировки.
Не будем тянуть время, Поехали!
📌 Гайд
😁5❤4🤬1
Forwarded from Golang
🛠️ Cloudflare нашла редкий баг в компиляторе Go для ARM64 — ошибка повреждала стек и вызывала краши
Инженеры Cloudflare заметили странные fatal panics на ARM64-серверах, сопровождающиеся сообщениями вроде *“traceback did not unwind completely”*.
Ошибки указывали на то, что Go runtime не может корректно «размотать» стек после паники, а значит — стек повреждён.
После длительного расследования выяснилось: проблема была в самом компиляторе Go для ARM64.
Он иногда разбивал инструкцию на две отдельные операции:
Если между ними происходило асинхронное прерывание (async preemption), например, от планировщика или сборщика мусора, указатель стека (RSP) переходил в некорректное состояние.
В результате, когда Go runtime пытался «размотать» стек для трассировки ошибки, он сталкивался с повреждёнными адресами и завершался крашем.
Cloudflare смогла воспроизвести баг на минимальном примере: функция с большим стеком вызывала panic, и если прерывание происходило ровно между двумя частями инструкции, процесс завершался segmentation fault.
✅ Исправление уже включено в версии Go 1.23.12, 1.24.6 и 1.25.0.
Теперь компилятор избегает разбиения инструкции, используя промежуточный регистр — это гарантирует, что стек всегда корректен даже при прерывании выполнения.
Cloudflare подчёркивает: подобные ошибки встречаются крайне редко и проявляются только под высокой нагрузкой на ARM-серверах.
Но этот случай показывает, насколько сложно отлавливать низкоуровневые race condition-баги, которые могут оставаться незаметными годами, пока не сойдутся «идеальные» условия.
📌Подробнее: https://blog.cloudflare.com/how-we-found-a-bug-in-gos-arm64-compiler/
@Golang_google
Инженеры Cloudflare заметили странные fatal panics на ARM64-серверах, сопровождающиеся сообщениями вроде *“traceback did not unwind completely”*.
Ошибки указывали на то, что Go runtime не может корректно «размотать» стек после паники, а значит — стек повреждён.
После длительного расследования выяснилось: проблема была в самом компиляторе Go для ARM64.
Он иногда разбивал инструкцию на две отдельные операции:
ADD $framesize, RSP, RSP
Если между ними происходило асинхронное прерывание (async preemption), например, от планировщика или сборщика мусора, указатель стека (RSP) переходил в некорректное состояние.
В результате, когда Go runtime пытался «размотать» стек для трассировки ошибки, он сталкивался с повреждёнными адресами и завершался крашем.
Cloudflare смогла воспроизвести баг на минимальном примере: функция с большим стеком вызывала panic, и если прерывание происходило ровно между двумя частями инструкции, процесс завершался segmentation fault.
✅ Исправление уже включено в версии Go 1.23.12, 1.24.6 и 1.25.0.
Теперь компилятор избегает разбиения инструкции, используя промежуточный регистр — это гарантирует, что стек всегда корректен даже при прерывании выполнения.
Cloudflare подчёркивает: подобные ошибки встречаются крайне редко и проявляются только под высокой нагрузкой на ARM-серверах.
Но этот случай показывает, насколько сложно отлавливать низкоуровневые race condition-баги, которые могут оставаться незаметными годами, пока не сойдутся «идеальные» условия.
📌Подробнее: https://blog.cloudflare.com/how-we-found-a-bug-in-gos-arm64-compiler/
@Golang_google
👍16❤5🥰1
16 октября пройдёт совместный митап 2ГИС и Lamoda Tech — офлайн и онлайн. Доклады, факапы, еда, пиво и люди, которые говорят на одном языке — Go.
📍 Москва, Новоданиловская наб., 12, офис 2ГИС, 14 этаж
🕖 19:00 — 23:00
В программе:
— Дмитрий Буров, Lamoda Tech: «За кулисами асинхронности: корутины, горутины и правда между ними»
— Павел Шнель, 2ГИС: «Интеграции под нагрузкой: практики и последствия решений»
— Разгоны факапов от спикеров и участников. За лучшие факапы — фирменный мерч.
После — афтерпати и нетворкинг. Скучно не будет!
👉 Регистрация
Реклама. ООО "ДУБЛЬГИС" ИНН: 5405276278 Erid: 2RanymgKstm
📍 Москва, Новоданиловская наб., 12, офис 2ГИС, 14 этаж
🕖 19:00 — 23:00
В программе:
— Дмитрий Буров, Lamoda Tech: «За кулисами асинхронности: корутины, горутины и правда между ними»
— Павел Шнель, 2ГИС: «Интеграции под нагрузкой: практики и последствия решений»
— Разгоны факапов от спикеров и участников. За лучшие факапы — фирменный мерч.
После — афтерпати и нетворкинг. Скучно не будет!
👉 Регистрация
Реклама. ООО "ДУБЛЬГИС" ИНН: 5405276278 Erid: 2RanymgKstm
❤3
PostgreSQL – одна из самых мощных СУБД с открытым исходным кодом. Этот гайд подробно охватывает ключевые аспекты PostgreSQL: от внутренней архитектуры до приёмов оптимизации. Мы рассмотрим администрирование, производительность, расширения, инструменты, а также сравним популярные ORM для Python и Go. В конце приведён список продвинутых вопросов, часто встречающихся на собеседованиях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3❤2