Презентация «Что нового в 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
Инфраструктура аутентификации с открытым исходным кодом на Go для бизнес-приложений (например, B2B SaaS).
https://github.com/tesseral-labs/tesseral
👉 @juniorGolang
https://github.com/tesseral-labs/tesseral
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎2❤1
JSON Web Tokens in Go
JSON Web Tokens — это хорошо известный и популярный открытый стандарт, который определяет компактный способ безопасной передачи информации между сторонами в виде JSON-объекта.
В этой статье мы углубимся в сам стандарт, чтобы точно понять, как работает JWT. Мы также реализуем безопасный сервер на Go, который сможет выпускать JWT и проверять их. И, наконец, рассмотрим лучшие практики безопасного использования JWT
https://packagemain.tech/p/json-web-tokens-in-go
👉 @juniorGolang
JSON Web Tokens — это хорошо известный и популярный открытый стандарт, который определяет компактный способ безопасной передачи информации между сторонами в виде JSON-объекта.
В этой статье мы углубимся в сам стандарт, чтобы точно понять, как работает JWT. Мы также реализуем безопасный сервер на Go, который сможет выпускать JWT и проверять их. И, наконец, рассмотрим лучшие практики безопасного использования JWT
https://packagemain.tech/p/json-web-tokens-in-go
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4
Ограничение скорости в Go Fiber (Скользящее окно)
Ограничение скорости (rate limiting) — это важный механизм защиты ваших сервисов от злоупотреблений.
Go Fiber предоставляет отличную поддержку middleware, таких как limiter, которые позволяют легко реализовать ограничение скорости.
Вот простой пример с использованием стратегии скользящего окна (sliding window), белого списка IP-адресов (IP whitelisting) и пользовательской функции извлечения ключа (custom key extractor).
👉 @GolangPortal
Ограничение скорости (rate limiting) — это важный механизм защиты ваших сервисов от злоупотреблений.
Go Fiber предоставляет отличную поддержку middleware, таких как limiter, которые позволяют легко реализовать ограничение скорости.
Вот простой пример с использованием стратегии скользящего окна (sliding window), белого списка IP-адресов (IP whitelisting) и пользовательской функции извлечения ключа (custom key extractor).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍6
Построение масштабируемых мультиарендных приложений на Go
Статья, описывает стратегии разработки SaaS-приложений с поддержкой мультиарендности на языке Go, основанные на опыте создания бэкенда для Atlas Cloud
https://atlasgo.io/blog/2025/05/26/gophercon-scalable-multi-tenant-apps-in-go
👉 @GolangPortal
Статья, описывает стратегии разработки SaaS-приложений с поддержкой мультиарендности на языке Go, основанные на опыте создания бэкенда для Atlas Cloud
https://atlasgo.io/blog/2025/05/26/gophercon-scalable-multi-tenant-apps-in-go
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4
if err != nil остаётся с нами
Команда Go официально закрыла тему синтаксического сахара для обработки ошибок:
https://go.dev/blog/error-syntax
👉 @GolangPortal
Команда Go официально закрыла тему синтаксического сахара для обработки ошибок:
https://go.dev/blog/error-syntax
«В обозримом будущем команда Go прекращает работу над синтаксическими изменениями языка, связанными с обработкой ошибок. Мы также закроем все открытые и новые предложения, касающиеся преимущественно синтаксиса обработки ошибок, без дальнейшего рассмотрения.»
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍8❤4👎3🤯3
Полнофункциональная, написанная на чистом Go библиотека для взаимодействия с #Kafka от версии 0.8.0 до 4.0+. Поддерживает продюсирование, потребление, транзакции, администрирование и многое другое
https://github.com/twmb/franz-go
👉 @GolangPortal
https://github.com/twmb/franz-go
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍5❤1
Построение анализатора разделов диска на Go
Задумывались ли вы, что происходит, когда вы запускаете
Прежде чем писать код, нужно понять, что именно мы будем парсить. Каждый диск начинается с таблицы разделов, которая сообщает операционной системе, как диск разбит на части
Читать статью: https://rezmoss.com/blog/disk-partition-analyzer-in-go/
👉 @GolangPortal
Задумывались ли вы, что происходит, когда вы запускаете
fdisk -l или открываете "Управление дисками" в Windows? Эти утилиты считывают необработанные данные с диска, чтобы отобразить информацию о разделах.Прежде чем писать код, нужно понять, что именно мы будем парсить. Каждый диск начинается с таблицы разделов, которая сообщает операционной системе, как диск разбит на части
Читать статью: https://rezmoss.com/blog/disk-partition-analyzer-in-go/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🔥2
Тестируйте, сообщайте об ошибках https://go.dev/issue/new
Анонс: https://groups.google.com/g/golang-announce/c/dlbl6lgfVX0/m/aD6Br_YFBgAJ
Скачать: https://go.dev/dl/#go1.25rc1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
Фреймворк, который позволяет писать логику состояния приложения на чистом Go, с хранением всех данных в памяти или на диске, не беспокоясь о масштабируемости и доступности
https://github.com/evrblk/monstera
👉 @GolangPortal
https://github.com/evrblk/monstera
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍4
Вы неправильно используете интерфейсы в Go — архитектурные запахи: неверные абстракции
Интерфейсы играют ключевую роль в архитектуре программного обеспечения. Их сила заключается в способности абстрагировать реализацию.
Одной из часто обсуждаемых тем на собеседованиях у разработчиков являются принципы SOLID. Интерфейсы покрывают большую часть практической реализации этих принципов. Например, чтобы следовать принципу открытости/закрытости или инверсии зависимостей, вам потребуется интерфейс.
Запомните простое правило: если вы хотите скрыть детали реализации от вызывающей стороны (клиента), скорее всего, вы будете использовать интерфейс.
Следовательно, если вы хотите абстрагировать один пакет от другого, интерфейс — подходящий инструмент.
Теперь давайте разберёмся, с какими проблемами использования интерфейсов мы сталкиваемся в Go-приложениях
Читать статью
👉 @GolangPortal
Интерфейсы играют ключевую роль в архитектуре программного обеспечения. Их сила заключается в способности абстрагировать реализацию.
Одной из часто обсуждаемых тем на собеседованиях у разработчиков являются принципы SOLID. Интерфейсы покрывают большую часть практической реализации этих принципов. Например, чтобы следовать принципу открытости/закрытости или инверсии зависимостей, вам потребуется интерфейс.
Запомните простое правило: если вы хотите скрыть детали реализации от вызывающей стороны (клиента), скорее всего, вы будете использовать интерфейс.
Следовательно, если вы хотите абстрагировать один пакет от другого, интерфейс — подходящий инструмент.
Теперь давайте разберёмся, с какими проблемами использования интерфейсов мы сталкиваемся в Go-приложениях
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🌚3
Инструмент наблюдаемости с открытым исходником для разработки на Go
Позволяет в реалтайме искать логи, следить за горутинами, трекать переменные и снимать метрики рантайма — всё, чтобы проще дебажить и понимать, что происходит в вашем приложении.
https://github.com/outrigdev/outrig
👉 @GolangPortal
Позволяет в реалтайме искать логи, следить за горутинами, трекать переменные и снимать метрики рантайма — всё, чтобы проще дебажить и понимать, что происходит в вашем приложении.
https://github.com/outrigdev/outrig
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍3❤2
Media is too big
VIEW IN TELEGRAM
Go стал ещё быстрее…
Скоро выйдет Go 1.25, и он наконец-то делает язык быстрее. Это обновление включает ключевые улучшения, устраняющие давние проблемы и повышающие производительность Go для разработчиков
Примечания к релизу Go 1.25:
https://tip.golang.org/doc/go1.25
Смотреть видео на YouTube
👉 @GolangPortal
Скоро выйдет Go 1.25, и он наконец-то делает язык быстрее. Это обновление включает ключевые улучшения, устраняющие давние проблемы и повышающие производительность Go для разработчиков
Примечания к релизу Go 1.25:
https://tip.golang.org/doc/go1.25
Смотреть видео на YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍8
Go-проект для развертывания контейнеризованных приложений в виде платформы веб-приложений для внутренних инструментов. Clace поддерживает Linux, Windows и OSX, предоставляя GitOps-подход для управления веб-приложениями
https://github.com/claceio/clace
👉 @GolangPortal
https://github.com/claceio/clace
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🤔1
context.Value — не наш другПоговорим о плохом паттерне в Go, особенно актуальном для новичков
Когда наши Go-приложения разрастаются, нередко возникает необходимость делиться данными между несколькими функциями.
Например, функция A может получить запись о платеже из базы данных и положить её в контекст, а функция C затем извлекает её, находясь где-то далеко.
Это кажется удобным, потому что:
ctx.payment в список аргументов."Почему бы просто не вызвать функцию C из функции A?"
Есть множество причин; например, C является частью логики B и использует аргументы, полученные от B.
Так в чём же проблема?
Вот где начинаются сложности:
На мой взгляд, главная проблема использования
ctx.Value — это чрезмерная неявность. Данные "прячутся" в контексте, и отследить их становится сложно.Неявность может быть вредной, даже если к ней легко привыкнуть.
…
Итак, когда же стоит использовать
context.Value()?Я бы рекомендовал избегать его, когда это возможно. Тем не менее, в документации Go указано, что он полезен для "передачи значений, связанных с запросом, через границы API и между процессами".
Имеет смысл применять его для передачи данных, связанных с запросом, таких как:
…
"Разве payment не относится к запросу?"
Если
payment нужен во многих функциях цепочки, лучше передавать его явно. Это делает очевидным, что функция работает с payment, не читая тело запроса.Я бы избегал передачи бизнес-данных через
context.Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤12
Скоро в Go 1.25: Эволюция JSON в Go — от v1 к v2
Вторая версия пакета json, которая появится в Go 1.25, представляет собой крупное обновление с множеством несовместимых изменений. Пакет v2 добавляет новые возможности, исправляет проблемы с API и поведение, а также значительно улучшает производительность.
Давайте посмотрим, что изменилось:
https://antonz.org/go-json-v2/
👉 @GolangPortal
Вторая версия пакета json, которая появится в Go 1.25, представляет собой крупное обновление с множеством несовместимых изменений. Пакет v2 добавляет новые возможности, исправляет проблемы с API и поведение, а также значительно улучшает производительность.
Давайте посмотрим, что изменилось:
https://antonz.org/go-json-v2/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤5
Опенсорсная современная веб-панель управления для администрирования Linux-серверов.
https://github.com/1Panel-dev/1Panel
👉 @GolangPortal
https://github.com/1Panel-dev/1Panel
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍4