Образы контейнеров
Довольно часто можно встретить практику, когда статически слинкованный бинарник на Go просто кладут в образ, собранный
- нет rootfs-лейаута
- отсутствуют CA-сертификаты
- нет базы данных часовых поясов
Решение? Использовать distroless-базу вместо этого
Подробнее о проблеме и одном из возможных решений:
🔹 Building Container Images FROM Scratch: 6 Pitfalls That Are Often Overlooked
🔹 What's Inside Distroless Container Images: Taking a Closer Look
👉 @GolangPortal
FROM scratch стоит ли так делать? 🤔Довольно часто можно встретить практику, когда статически слинкованный бинарник на Go просто кладут в образ, собранный
FROM scratch. Но у такого подхода есть ряд подводных камней:- нет rootfs-лейаута
- отсутствуют CA-сертификаты
- нет базы данных часовых поясов
Решение? Использовать distroless-базу вместо этого
Подробнее о проблеме и одном из возможных решений:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍7🔥4👎2
Лог-ориентированная база данных реального времени на Go, реплицирующаяся как шина сообщений для ИИ и периферийных вычислений
GitHub: unisondb
👉 @GolangPortal
GitHub: unisondb
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥2
Построение конвейера «производитель–потребитель» в Go с использованием горутин и каналов
Статья рассказывает, как с помощью языковых механизмов Go (горутин и каналов) построить конвейер «производитель–потребитель», чтобы параллельно обрабатывать тяжёлые CPU-задачи и при этом безопасно записывать результаты в базу данных без конкуренции за запись
Читайте здесь
👉 @GolangPortal
Статья рассказывает, как с помощью языковых механизмов Go (горутин и каналов) построить конвейер «производитель–потребитель», чтобы параллельно обрабатывать тяжёлые CPU-задачи и при этом безопасно записывать результаты в базу данных без конкуренции за запись
Читайте здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤8🔥2
Веб-инструмент на Go для удобного и уверенного управления конфигурациями Traefik
GitHub: traefikr
👉 @GolangPortal
GitHub: traefikr
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3🔥3
Терминальный клиент для HTTP/GraphQL/gRPC с поддержкой SSH-туннелей, WebSocket, SSE, workflows, профилирования, OpenAPI и сравнения ответов
GitHub: resterm
👉 @GolangPortal
GitHub: resterm
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍7🤔1
Интересная статья: «миллионе способов словить data race в Go»
Автор разбирает разные паттерны, на которых легко поймать data race в Go, и даёт практичные советы, как избежать этих проблем в реальном коде
👉 @GolangPortal
Автор разбирает разные паттерны, на которых легко поймать data race в Go, и даёт практичные советы, как избежать этих проблем в реальном коде
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3
Самостоятельно развёртываемая файловая менеджмент-система на Go с поддержкой нескольких облачных хранилищ
GitHub: cloudreve
👉 @GolangPortal
GitHub: cloudreve
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2😁2
Каналы в Go легко использовать неправильно, если не знать правил:
- Отправка в канал вызывает панику, если канал закрыт в любой момент до фактического завершения отправки, даже если закрытие произошло после начала отправки, но до её завершения.
- Чтение из закрытого канала никогда не приводит к панике.
- Закрытие nil-канала или уже закрытого канала вызывает панику.
Эти правила подсказывают простую модель владения:
Сторона, которая “владеет” жизненным циклом канала (обычно отправитель), должна быть единственной, кто имеет право закрывать канал, и должна сделать это ровно один раз, после того как все отправки завершены.
Потребители обычно не должны вызывать close.
Если у вас несколько отправителей, им нужно координироваться так, чтобы только один из них фактически выполнял закрытие. Обычный паттерн - обернуть close(ch) в sync.Once или направить все отправки через одну горутину, которая и становится единственным закрывающим, когда знает, что больше значений не будет.
👉 @GolangPortal
- Отправка в канал вызывает панику, если канал закрыт в любой момент до фактического завершения отправки, даже если закрытие произошло после начала отправки, но до её завершения.
- Чтение из закрытого канала никогда не приводит к панике.
- Закрытие nil-канала или уже закрытого канала вызывает панику.
Эти правила подсказывают простую модель владения:
Сторона, которая “владеет” жизненным циклом канала (обычно отправитель), должна быть единственной, кто имеет право закрывать канал, и должна сделать это ровно один раз, после того как все отправки завершены.
Потребители обычно не должны вызывать close.
Если у вас несколько отправителей, им нужно координироваться так, чтобы только один из них фактически выполнял закрытие. Обычный паттерн - обернуть close(ch) в sync.Once или направить все отправки через одну горутину, которая и становится единственным закрывающим, когда знает, что больше значений не будет.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤8🔥3
Принято! Go 1.26 введёт метрики по состояниям горутин: выполняются, ожидают, в системных вызовах и т.д.
Разработчики смогут использовать их для раннего выявления проблем без необходимости полной трассировки
Подробнее тут
👉 @GolangPortal
Разработчики смогут использовать их для раннего выявления проблем без необходимости полной трассировки
Подробнее тут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37❤6🔥3
Если вы серьёзно занимаетесь Go, вам нужно подтянуть свой скилл в тестировании.
Эти слайды от со-основателя HashiCorp — одно из лучших материалов для изучения:
https://speakerdeck.com/mitchellh/advanced-testing-with-go
👉 @GolangPortal
Эти слайды от со-основателя HashiCorp — одно из лучших материалов для изучения:
https://speakerdeck.com/mitchellh/advanced-testing-with-go
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍3👎2
Лёгкое, self-hosted приложение для личных финансов с удобным интерфейсом и мощным функционалом для бухгалтерского учёта.
Бэкенд на Go
GitHub: ezbookkeeping
👉 @GolangPortal
Бэкенд на Go
GitHub: ezbookkeeping
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍7❤4👀1
Изучите эволюцию стратегий кеширования в разработке ПО, чтобы понять, как разные подходы помогают повысить производительность и снизить задержки в ваших приложениях.
В этой статье – детальное погружение в мир кеширования:
https://maypok86.github.io/otter/blog/cache-evolution/
👉 @GolangPortal
В этой статье – детальное погружение в мир кеширования:
https://maypok86.github.io/otter/blog/cache-evolution/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4🔥3
При выполнении запросов к базе данных в Go используйте
👉 @GolangPortal
& в rows.Scan(), чтобы передавать адреса, а не значения.Scan() нужно иметь возможность записывать данные напрямую в поля вашей структурыPlease open Telegram to view this post
VIEW IN TELEGRAM
❤9👍3😁2👎1
Современный, готовый к продакшену Go REST API для аутентификации и авторизации, включающий социальный логин, верификацию email, работу с JWT и интеграцию с Redis
https://github.com/gjovanovicst/golang-auth-api
👉 @GolangPortal
https://github.com/gjovanovicst/golang-auth-api
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤2🔥2
Принято! В Go 1.26 появится
Никакого reflection. Никаких рантайм-паник. Лаконичный код. Это мощно✌️
https://antonz.org/accepted/errors-astype/
👉 @GolangPortal
errors.AsType – современная, типобезопасная альтернатива громоздкому errors.As.Никакого reflection. Никаких рантайм-паник. Лаконичный код. Это мощно
https://antonz.org/accepted/errors-astype/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤24👍8
Упрощает конфигурацию Go-приложений через переменные окружения. В локальной разработке можно использовать файл .env с парами ключ/значение. В продакшене значения подтягиваются из secret manager.
GitHub: dotconfig
👉 @GolangPortal
GitHub: dotconfig
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤔1
Вышли Go 1.25.5 и 1.24.11!
- Безопасность: Включают патчи для уязвимостей в crypto/x509 (CVE-2025-61729, CVE-2025-61727).
- Анонс: https://groups.google.com/g/golang-announce/c/8FJoBkPddm4/m/kYpVlPw1CQAJ
- Скачать: https://go.dev/dl/#go1.25.5
👉 @GolangPortal
- Безопасность: Включают патчи для уязвимостей в crypto/x509 (CVE-2025-61729, CVE-2025-61727).
- Анонс: https://groups.google.com/g/golang-announce/c/8FJoBkPddm4/m/kYpVlPw1CQAJ
- Скачать: https://go.dev/dl/#go1.25.5
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍7🔥3
Ключевые Go-паттерны, справочник по стандартной библиотеке и интерактивные примеры
https://app.gointerview.dev/cheatsheet
👉 @GolangPortal
https://app.gointerview.dev/cheatsheet
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥10❤4👎1
GitHub теперь в Telegram!
Самый прогерский канал, где за 10 минут ты научишься:
/ Пробив по фото и номеру в ТГ
// Как взломать вебку подруги
/// Мануал по OSINT разведке
Подписывайся, нас уже сотни тысяч: >@GitHub
Самый прогерский канал, где за 10 минут ты научишься:
/ Пробив по фото и номеру в ТГ
// Как взломать вебку подруги
/// Мануал по OSINT разведке
Подписывайся, нас уже сотни тысяч: >@GitHub
👎10👍1
Многие статьи заставляют думать, что
Go держит пул переиспользуемых горутин на каждый процессор и глобальный пул, причём у части горутин в этих пулах уже есть прикреплённые стеки, а у части нет (см. диаграмму ниже)
Рантайм поддерживает динамический “начальный размер стека”, который пересчитывается в каждом цикле сборки мусора исходя из среднего использования стека всеми просканированными горутинами
Когда вы вызываете
Если размер стека повторно используемой горутины отличается от текущего “начального размера стека”, её старый стек освобождается, и ей выделяется новый стек ровно текущего начального размера.
Если подходящей повторно используемой горутины нет, рантайм выделяет новую с фиксированным начальным стеком 2 KiB ( на большинстве 64-битных Unix-подобных платформ)
👉 @GolangPortal #tip by Phuong Le
go func() {} всегда создаёт горутину с 2 KiB стека. Иногда так и есть, но далеко не всегда.Go держит пул переиспользуемых горутин на каждый процессор и глобальный пул, причём у части горутин в этих пулах уже есть прикреплённые стеки, а у части нет (см. диаграмму ниже)
Рантайм поддерживает динамический “начальный размер стека”, который пересчитывается в каждом цикле сборки мусора исходя из среднего использования стека всеми просканированными горутинами
Когда вы вызываете
go f(), рантайм может взять горутину и стек из пулов, поэтому многие горутины на самом деле стартуют с размером стека больше фиксированного минимума 2 KiB – например, 4 KiB, 8 KiB, 16 KiB и так далее.Если размер стека повторно используемой горутины отличается от текущего “начального размера стека”, её старый стек освобождается, и ей выделяется новый стек ровно текущего начального размера.
Если подходящей повторно используемой горутины нет, рантайм выделяет новую с фиксированным начальным стеком 2 KiB ( на большинстве 64-битных Unix-подобных платформ)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍9👎1