https://github.com/cristalhq/aconfig
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9
Отмена контекста в Go упрощает управление операциями корректным образом.
Один из часто используемых мной паттернов — это
Запускаешь задачу (например, фоновый воркер), и её можно отменить в любой момент.
Не нужно использовать сложные сигналы или вручную управлять флагами.
Запускаешь воркер, и когда программа получает сигнал завершения (Ctrl+C), контекст отменяется, и воркер корректно завершает работу.
Это один из самых надёжных способов остановки долго работающих задач по требованию.
👉 @juniorGolang
Один из часто используемых мной паттернов — это
context.WithCancel.Запускаешь задачу (например, фоновый воркер), и её можно отменить в любой момент.
Не нужно использовать сложные сигналы или вручную управлять флагами.
Запускаешь воркер, и когда программа получает сигнал завершения (Ctrl+C), контекст отменяется, и воркер корректно завершает работу.
Это один из самых надёжных способов остановки долго работающих задач по требованию.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤7
Реализация лимитера скорости с использованием Golang и Redis
В первой части этой статьи мы обсудим, почему отслеживание heartbeat-сигналов IoT-устройств критично важно и почему лимитирование запросов — это не просто полезная опция, а необходимое условие стабильности системы.
Во второй части мы перейдём к практике. Я построю рабочую систему отслеживания heartbeat-сигналов на Golang с использованием Redis, рассчитанную на распределённую архитектуру. Поехали.
👉 Читать
👉 @juniorGolang
В первой части этой статьи мы обсудим, почему отслеживание heartbeat-сигналов IoT-устройств критично важно и почему лимитирование запросов — это не просто полезная опция, а необходимое условие стабильности системы.
Во второй части мы перейдём к практике. Я построю рабочую систему отслеживания heartbeat-сигналов на Golang с использованием Redis, рассчитанную на распределённую архитектуру. Поехали.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤5🔥2
🔒 Безопасность: Включает исправление уязвимости в пакете
os (CVE-2025-22873).📢 Объявление: https://groups.google.com/g/golang-announce/c/UZoIkUT367A/m/5WDxKizJAQAJ
📦 Загрузка: https://go.dev/dl/#go1.24.3
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍4
AI-агент для Kubernetes с поддержкой искусственного интеллекта, который запускается в вашем терминале
https://github.com/GoogleCloudPlatform/kubectl-ai
👉 @juniorGolang
https://github.com/GoogleCloudPlatform/kubectl-ai
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🌚3🌭2
После 19 лет работы Иэн Лэнс Тейлор объявил об уходе из Google.
Большую часть этого времени он был ключевым участником команды разработчиков языка программирования Go.
Подробнее о его пути читайте здесь: https://airs.com/blog/archives/670
👉 @juniorGolang
Большую часть этого времени он был ключевым участником команды разработчиков языка программирования Go.
Подробнее о его пути читайте здесь: https://airs.com/blog/archives/670
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔6❤1
Корректное завершение работы (graceful shutdown) в Go — это тонкий процесс, требующий осторожности, чтобы избежать повреждения данных и плохого пользовательского опыта.
Это единственное руководство, которое вам нужно, чтобы овладеть этим процессом:
https://victoriametrics.com/blog/go-graceful-shutdown/
👉 @juniorGolang
Это единственное руководство, которое вам нужно, чтобы овладеть этим процессом:
https://victoriametrics.com/blog/go-graceful-shutdown/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3
Автор книги «100 ошибок Go и как их избежать» признался, что даже не знал о возможности доступа к переменной
👍 — если знал об этом
🔥 — если стало открытием
👉 @juniorGolang
v в условии else-if:👍 — если знал об этом
🔥 — если стало открытием
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥72👍37😁13
Без использования CGo, кроссплатформенный GUI-инструментарий для Go
https://gitlab.com/cznic/tk9.0
👉 @juniorGolang
https://gitlab.com/cznic/tk9.0
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤5👍4🤔1
Директивы Go — это специальные комментарии, которые влияют на компилятор Go, компоновку (linking) и другие инструменты. Они позволяют добавлять метаданные или инструкции прямо в исходный код на Go.
Одна из особенно полезных директив —
Обычный сценарий использования — встраивание ресурсов веб-приложения (папка
На картинке приведён простой пример, как встроить папку
👉 @juniorGolang
Одна из особенно полезных директив —
//go:embed. Она позволяет встраивать статические ресурсы, такие как файлы или целые папки, непосредственно в скомпилированный бинарный файл Go, избавляя от необходимости отдельно развёртывать папки с ресурсами.Обычный сценарий использования — встраивание ресурсов веб-приложения (папка
assets, содержащая HTML, CSS, JavaScript). Эти ресурсы затем можно обслуживать напрямую с помощью стандартного пакета Go net/http.На картинке приведён простой пример, как встроить папку
web/dist, содержащую скомпилированные ресурсы SPA, и обслуживать ихPlease open Telegram to view this post
VIEW IN TELEGRAM
👍20❤7🔥2
Важные аспекты при использовании пакета
При работе со значениями времени в Go одной из самых распространённых операций является сравнение двух временных меток.
Однако эта на первый взгляд простая задача может привести к скрытым ошибкам, если не учитывать разницу между использованием оператора сравнения == и методом
👉 @juniorGolang
time в GoПри работе со значениями времени в Go одной из самых распространённых операций является сравнение двух временных меток.
Однако эта на первый взгляд простая задача может привести к скрытым ошибкам, если не учитывать разницу между использованием оператора сравнения == и методом
Equal()Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3
Централизованная обработка HTTP-ошибок в Go
Статья от Алексиса Буше предлагает простой и эффективный способ централизовать обработку ошибок в HTTP-хендлерах на Go, чтобы избежать повторяющегося кода и улучшить читаемость.
Основная идея проста: изменить обработчики так, чтобы они возвращали ошибки, а не обрабатывали их напрямую.
Полный текст статьи с примерами кода доступен на сайте автора:
https://www.alexisbouchez.com/blog/http-error-handling-in-go
👉 @juniorGolang
Статья от Алексиса Буше предлагает простой и эффективный способ централизовать обработку ошибок в HTTP-хендлерах на Go, чтобы избежать повторяющегося кода и улучшить читаемость.
Основная идея проста: изменить обработчики так, чтобы они возвращали ошибки, а не обрабатывали их напрямую.
Полный текст статьи с примерами кода доступен на сайте автора:
https://www.alexisbouchez.com/blog/http-error-handling-in-go
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4
Мощный уровень автоматизации, построенный поверх FFmpeg — разработан для того, чтобы сделать перекодирование видео и аудио проще, умнее и удобнее для интеграции.
https://github.com/welovemedia/ffmate
👉 @juniorGolang
https://github.com/welovemedia/ffmate
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🤔1
Самая недооценённая суперспособность Go — это его парсерные пакеты:
На самом деле поразительно, насколько редко эти пакеты используются и обсуждаются.
По сути, ваш Go-код токенизируется и парсится компилятором для построения так называемого абстрактного синтаксического дерева (AST), чтобы затем скомпилироваться в промежуточное представление (IR), которое в дальнейшем переводится в машинный код.
Пакет
Прелесть в том, что это открывает потрясающие возможности для автоматизации шаблонного кода, ведь у вас буквально под рукой встроенный парсер языка!
Например, вы можете генерировать структуры DTO из моделей с JSON-тегами. Если бы вы попытались сделать это вручную, используя только условные операторы и циклы, ваш код был бы полон ошибок, а надёжная реализация потребовала бы создания полноценного парсера Go-кода. К счастью, в Go вы можете использовать стандартную библиотеку для разбора Go-файлов, извлечения всех типов и генерации DTO.
👉 @juniorGolang
go/parser, go/token и go/ast.На самом деле поразительно, насколько редко эти пакеты используются и обсуждаются.
По сути, ваш Go-код токенизируется и парсится компилятором для построения так называемого абстрактного синтаксического дерева (AST), чтобы затем скомпилироваться в промежуточное представление (IR), которое в дальнейшем переводится в машинный код.
Пакет
go/parser разбирает Go-код и позволяет корректно определить всё, что касается Go-файла: импорты, комментарии, функции, типы, переменные и многое другое.Прелесть в том, что это открывает потрясающие возможности для автоматизации шаблонного кода, ведь у вас буквально под рукой встроенный парсер языка!
Например, вы можете генерировать структуры DTO из моделей с JSON-тегами. Если бы вы попытались сделать это вручную, используя только условные операторы и циклы, ваш код был бы полон ошибок, а надёжная реализация потребовала бы создания полноценного парсера Go-кода. К счастью, в Go вы можете использовать стандартную библиотеку для разбора Go-файлов, извлечения всех типов и генерации DTO.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥4❤3🤯1
Обрабатывайте 8 байт за раз, используя старую технику под названием Simd Within a Register (SWAR), на Go
https://github.com/dans-stuff/swar
👉 @juniorGolang
https://github.com/dans-stuff/swar
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍3🔥2🏆1
Презентация «Что нового в Go» с конференции Google I/O 2025
https://youtu.be/kj80m-umOxs?si=dUG1XvFWuU5wNscN
👉 @juniorGolang
https://youtu.be/kj80m-umOxs?si=dUG1XvFWuU5wNscN
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4
Пошаговое прохождение полного TLS-рукопожатия в Go: от перехвата ClientHello до настройки сертификата и зашифрованных сессий в одном понятном руководстве
https://dev.to/leapcell/complete-tls-workflow-in-golang-made-simple-full-process-explained-2ifm
👉 @juniorGolang
https://dev.to/leapcell/complete-tls-workflow-in-golang-made-simple-full-process-explained-2ifm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2
Библиотека на Go, предоставляющая контекстно-зависимые семафоры, в которых ограничения параллелизма применяются для каждого уникального произвольного ключа, что позволяет реализовать тонкую блокировку ресурсов
https://github.com/MonsieurTib/keyed-semaphore
👉 @juniorGolang
https://github.com/MonsieurTib/keyed-semaphore
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3
PGO — это то, что больше всего поразило меня в Go, когда я узнал об этом. Это классический Go: решение из разряда «не может быть, что такое вообще существует».
Go компилируется заранее (ahead-of-time). Это означает, что во время сборки исходный код Go напрямую переводится в машинный код для конкретной операционной системы и архитектуры, в результате чего создаётся самодостаточный исполняемый файл.
В отличие от JIT-компилятора, который выполняет компиляцию во время выполнения, что позволяет потенциально производить оптимизации на основе реальных сценариев исполнения.
Именно благодаря JIT JavaScript работает заметно быстрее других динамических языков, таких как Python.
Движок JS запускает фоновый процесс, который анализирует выполняемый машинный код, чтобы выявить «горячие участки» (часто повторяющиеся фрагменты, которые можно перекомпилировать в более оптимизированный машинный код); то же самое делает и JVM.
Хотя JIT генерирует более быстрый код, за это приходится платить увеличенным потреблением памяти. Любой, кто запускал продакшн-сервер на каком-либо из языков, основанных на JVM, или на JavaScript, знает, насколько сложно масштабировать такую систему.
Go же генерирует быстрый машинный код ещё на этапе компиляции, при этом с малым объёмом потребляемой памяти, тогда как JIT-языки дают лучшие результаты именно во время выполнения.
Но и это ещё не всё — в Go есть PGO. PGO (Profile-Guided Optimization) позволяет компилятору Go использовать информацию о реальном поведении приложения во время выполнения, чтобы принимать более эффективные решения при ahead-of-time компиляции. Как это работает:
1. Профилирование: Вы запускаете скомпилированное Go-приложение в реалистичной среде (тестовой или даже в продакшене) и собираете профили производительности. Эти профили содержат данные о том, как исполняется код — какие функции вызываются чаще всего (горячие участки), какие ветвления чаще всего выбираются и т. д.
2. Повторная компиляция: Затем вы передаёте собранные профили компилятору Go при следующей сборке (например:
3. Оптимизированная сборка: Компилятор использует данные профиля, чтобы принять более обоснованные решения — например, может агрессивнее инлайнить функции в горячих участках, менять структуру размещения кода или вносить другие оптимизации, основанные на наблюдаемом поведении программы.
Результат — Go получает преимущества оптимизаций, присущих JIT-компиляции, но без накладных расходов во время выполнения.
Чтобы включить PGO, сначала нужно импортировать пакет
Это автоматически зарегистрирует HTTP-обработчики, такие как
Затем можно получить живые профили с эндпоинтов
👉 @juniorGolang
Go компилируется заранее (ahead-of-time). Это означает, что во время сборки исходный код Go напрямую переводится в машинный код для конкретной операционной системы и архитектуры, в результате чего создаётся самодостаточный исполняемый файл.
В отличие от JIT-компилятора, который выполняет компиляцию во время выполнения, что позволяет потенциально производить оптимизации на основе реальных сценариев исполнения.
Именно благодаря JIT JavaScript работает заметно быстрее других динамических языков, таких как Python.
Движок JS запускает фоновый процесс, который анализирует выполняемый машинный код, чтобы выявить «горячие участки» (часто повторяющиеся фрагменты, которые можно перекомпилировать в более оптимизированный машинный код); то же самое делает и JVM.
Хотя JIT генерирует более быстрый код, за это приходится платить увеличенным потреблением памяти. Любой, кто запускал продакшн-сервер на каком-либо из языков, основанных на JVM, или на JavaScript, знает, насколько сложно масштабировать такую систему.
Go же генерирует быстрый машинный код ещё на этапе компиляции, при этом с малым объёмом потребляемой памяти, тогда как JIT-языки дают лучшие результаты именно во время выполнения.
Но и это ещё не всё — в Go есть PGO. PGO (Profile-Guided Optimization) позволяет компилятору Go использовать информацию о реальном поведении приложения во время выполнения, чтобы принимать более эффективные решения при ahead-of-time компиляции. Как это работает:
1. Профилирование: Вы запускаете скомпилированное Go-приложение в реалистичной среде (тестовой или даже в продакшене) и собираете профили производительности. Эти профили содержат данные о том, как исполняется код — какие функции вызываются чаще всего (горячие участки), какие ветвления чаще всего выбираются и т. д.
2. Повторная компиляция: Затем вы передаёте собранные профили компилятору Go при следующей сборке (например:
go build -pgo=profile.pprof ...).3. Оптимизированная сборка: Компилятор использует данные профиля, чтобы принять более обоснованные решения — например, может агрессивнее инлайнить функции в горячих участках, менять структуру размещения кода или вносить другие оптимизации, основанные на наблюдаемом поведении программы.
Результат — Go получает преимущества оптимизаций, присущих JIT-компиляции, но без накладных расходов во время выполнения.
Чтобы включить PGO, сначала нужно импортировать пакет
pprof в ваше Go-приложение, например:import _ "net/http/pprof"
Это автоматически зарегистрирует HTTP-обработчики, такие как
/debug/pprof/profile, в стандартном HTTP-маршрутизаторе Go, который запускается через http.ListenAndServe()Затем можно получить живые профили с эндпоинтов
/debug/pprof/*, используя curl, и выполнить PGO-сборку, как в примере ниже.Please open Telegram to view this post
VIEW IN TELEGRAM
👍28❤6🤔1