Golang Portal
8.06K subscribers
419 photos
26 videos
7 files
450 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Golang-разработчика

Связь: @devmangx
Download Telegram
Каналы в Go легко использовать неправильно, если не знать правил:

- Отправка в канал вызывает панику, если канал закрыт в любой момент до фактического завершения отправки, даже если закрытие произошло после начала отправки, но до её завершения.

- Чтение из закрытого канала никогда не приводит к панике.

- Закрытие nil-канала или уже закрытого канала вызывает панику.

Эти правила подсказывают простую модель владения:

Сторона, которая “владеет” жизненным циклом канала (обычно отправитель), должна быть единственной, кто имеет право закрывать канал, и должна сделать это ровно один раз, после того как все отправки завершены.

Потребители обычно не должны вызывать close.

Если у вас несколько отправителей, им нужно координироваться так, чтобы только один из них фактически выполнял закрытие. Обычный паттерн - обернуть close(ch) в sync.Once или направить все отправки через одну горутину, которая и становится единственным закрывающим, когда знает, что больше значений не будет.

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍118🔥3
Принято! Go 1.26 введёт метрики по состояниям горутин: выполняются, ожидают, в системных вызовах и т.д.

Разработчики смогут использовать их для раннего выявления проблем без необходимости полной трассировки

Подробнее тут

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍376🔥3
Если вы серьёзно занимаетесь Go, вам нужно подтянуть свой скилл в тестировании.

Эти слайды от со-основателя HashiCorp — одно из лучших материалов для изучения:

https://speakerdeck.com/mitchellh/advanced-testing-with-go

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍3👎2
Лёгкое, self-hosted приложение для личных финансов с удобным интерфейсом и мощным функционалом для бухгалтерского учёта.

Бэкенд на Go

GitHub: ezbookkeeping

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍74👀1
Изучите эволюцию стратегий кеширования в разработке ПО, чтобы понять, как разные подходы помогают повысить производительность и снизить задержки в ваших приложениях.

В этой статье – детальное погружение в мир кеширования:
https://maypok86.github.io/otter/blog/cache-evolution/

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥3
При выполнении запросов к базе данных в Go используйте & в rows.Scan(), чтобы передавать адреса, а не значения.
Scan() нужно иметь возможность записывать данные напрямую в поля вашей структуры

👉 @GolangPortal
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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍142🔥2
Принято! В Go 1.26 появится errors.AsType – современная, типобезопасная альтернатива громоздкому errors.As.

Никакого reflection. Никаких рантайм-паник. Лаконичный код. Это мощно✌️

https://antonz.org/accepted/errors-astype/

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
24👍8
Упрощает конфигурацию Go-приложений через переменные окружения. В локальной разработке можно использовать файл .env с парами ключ/значение. В продакшене значения подтягиваются из secret manager.

GitHub: dotconfig

👉 @GolangPortal
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
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍7🔥3
Ключевые Go-паттерны, справочник по стандартной библиотеке и интерактивные примеры

https://app.gointerview.dev/cheatsheet

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥104👎1
GitHub теперь в Telegram!

Самый прогерский канал, где за 10 минут ты научишься:

/ Пробив по фото и номеру в ТГ
// Как взломать вебку подруги
/// Мануал по OSINT разведке


Подписывайся, нас уже сотни тысяч: >@GitHub
👎10👍1
Многие статьи заставляют думать, что go func() {} всегда создаёт горутину с 2 KiB стека. Иногда так и есть, но далеко не всегда.

Go держит пул переиспользуемых горутин на каждый процессор и глобальный пул, причём у части горутин в этих пулах уже есть прикреплённые стеки, а у части нет (см. диаграмму ниже)

Рантайм поддерживает динамический “начальный размер стека”, который пересчитывается в каждом цикле сборки мусора исходя из среднего использования стека всеми просканированными горутинами

Когда вы вызываете go f(), рантайм может взять горутину и стек из пулов, поэтому многие горутины на самом деле стартуют с размером стека больше фиксированного минимума 2 KiB – например, 4 KiB, 8 KiB, 16 KiB и так далее.

Если размер стека повторно используемой горутины отличается от текущего “начального размера стека”, её старый стек освобождается, и ей выделяется новый стек ровно текущего начального размера.

Если подходящей повторно используемой горутины нет, рантайм выделяет новую с фиксированным начальным стеком 2 KiB ( на большинстве 64-битных Unix-подобных платформ)

👉 @GolangPortal #tip by Phuong Le
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍6