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

Связь: @devmangx
Download Telegram
Быстрый, современный генератор документации для Go. Использует идиоматичную работу с конкурентностью, минимальное количество зависимостей и чистые HTML-шаблоны для создания полноценно просматриваемых и фильтруемых страниц документации для Go-кодовых баз

https://github.com/navid-m/arrow

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102
От TCP до HTTP. Свежий полный курс: почти 5 часов, бесплатно на YouTube

Весь веб построен на HTTP, и нет лучшего способа понять, как что-то работает, чем реализовать это самостоятельно. В этом курсе мы разберём все тонкости протокола HTTP/1.1 и параллельно с этим напишем свой собственный HTTP-сервер с нуля на Go

https://www.youtube.com/watch?v=FknTw9bJsXM

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥5👍4
google/wire теперь в архиве, потому что считается завершённым, а не устаревшим

Тем не менее, лучше избегать DI-фреймворков и собирать зависимости вручную.

Конструкторы и мелкие пакеты делают зависимости очевидными и снижают риск неожиданных сюрпризов. Это также заставляет больше продумывать дизайн.

Если проект уже построен вокруг DI-фреймворка или бизнес-требования слишком сложны для ручной сборки, использовать его нормально. Предпочтительный выбор — google/wire, а не uber/dig или fx, так как динамическая сборка зависимостей нежелательна; явная сборка на этапе компиляции всегда лучше.

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113
Создание игр на Go для абсолютных новичков

Статья призывает разработчиков вернуть интерес к кодингу, создавая простые игры на Go с библиотекой Ebitengine, и объясняет базовые принципы геймдева на практике 😏

https://threedots.tech/post/making-games-in-go/

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍2🤔1
Лучший совет, который я когда-либо использовал, чтобы разобраться в кодовой базе, — это попросить Mermaid-диаграмму в Cursor

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍7🤯1
Два новых расширения для SQLite от Walter Wanderley

- HTTP-запросы
- MQTT publish/subscribe

https://sqlpkg.org/?q=litesql

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🌚2
Это должно быть обязательным к прочтению гайдом по проектированию RESTful API:
https://opensource.zalando.com/restful-api-guidelines/

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🤔1🌚1
Generics in Go — From Basics to Advanced for Senior Developers

Гид для опытных разработчиков по освоению дженериков в Go, от базовых концепций до практического применения

https://medium.com/@sogol.hedayatmanesh/generics-in-go-from-basics-to-advanced-for-senior-developers-887790b018d0

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82🔥2
В Go 1.25 на Linux по умолчанию включён Container-aware GOMAXPROCS

Если вы не в курсе, в чём именно проблема с GOMAXPROCS, почитайте вот это: https://victoriametrics.com/blog/kubernetes-cpu-go-gomaxprocs/

Что важно знать:

1. Фича активируется только тогда, когда Go-программа запущена внутри cgroup с выставленными CPU-лимитами.

Если вы запускаете Go напрямую на Linux-машине (не в контейнере) или если у контейнера не заданы CPU-лимиты, рантайм не увидит никаких ограничений от cgroup и будет вести себя по-старому — использовать все доступные CPU-ядра.

2. Рантайм Go не выставляет GOMAXPROCS только на старте

В Go есть специальная горутина — system monitor (sysmon), которая работает в фоне и выполняет разные служебные задачи. Этот system monitor периодически вызывает логику container-aware GOMAXPROCS, чтобы проверить, не изменились ли CPU-лимиты.

Если вы явно задали GOMAXPROCS, такие обновления полностью прекращаются.

3. Формула: GOMAXPROCS = min(affinity_count, max(2, ceil(quota/period)))

Минимальное значение GOMAXPROCS всегда равно 2, независимо от того, насколько низко выставлен CPU-лимит контейнера (за исключением случая, когда affinity_count < 2). Любой дробный CPU-лимит округляется вверх до ближайшего целого числа

Например: если задать лимит контейнера 0.5 ядра, то всё равно получится GOMAXPROCS=2; если задать 2.3 ядра — получится GOMAXPROCS=3; если задать 8 ядер на машине с 4 ядрами — получится GOMAXPROCS=4.

Обратите внимание, что CPU affinity отличается от CPU limits:

- CPU affinity говорит: «ты можешь выполняться только на этих конкретных ядрах» (например, ядра 2, 4, 6, 8).

- CPU limits говорят: «ты можешь использовать вот столько процессорного времени» (например, эквивалент 2.5 ядер по времени выполнения).

В большинстве обычных случаев affinity_count равен общему числу CPU-ядер на ноде.

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍7
Нашел годный ресурс, где автор пишет статьи по System Design. Внутри очень много схем и все они похоже отрисованы автором вручную для каждой статьи. Контент качественный, излагается почти в том порядке как на реальном интервью.

https://systemdesign.one/real-time-presence-platform-system-design/

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍5👀1
Механика работы sync.Pool отлично описана здесь: https://victoriametrics.com/blog/go-sync-pool/index.html

- Почему в New() у sync.Pool следует возвращать указатель?
- Как sync.Pool связан с планировщиком или GMP-моделью?
- Что такое проблема false sharing?
- Как устроен sync.Pool внутри?
- Как работает механизм stealing в sync.Pool?
- Почему в Go прямо указано: «Любой объект, положенный в Pool, может быть удалён автоматически в любой момент без уведомления»?

Кто ещё не читал, рекомендую ✌️

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63👍3
Anubis

Опенсорсный проект на Go, использующий Proof-of-Work для защиты от AI-скрейперов. Стартовал в январе, уже собрал 200k+ скачиваний и стоит в продакшене у GNOME, FFmpeg, FreeBSD, lore.kernel.org и других крупных ресурсов

https://github.com/TecharoHQ/anubis

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍65🤔2
This media is not supported in your browser
VIEW IN TELEGRAM
Нашёл классную 3D-визуализацию fan-in паттерна конкурентности в Go: https://divan.dev/demos/fanin/

В полной статье есть и другие паттерны: https://divan.dev/posts/go_concurrency_visualize/

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94🔥3
Go-драйвер для SQL, который позволяет выполнять запросы к CSV, TSV и LTSV-файлам, используя синтаксис SQL из SQLite3. Запрашивайте данные напрямую из файлов без каких-либо импортов или преобразований

https://github.com/nao1215/filesql

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍5
Как работает Protobuf

Protobuf (Protocol Buffers) — это способ сериализовать данные в компактный бинарный формат. За счёт этого они занимают меньше места и быстрее гоняются по сети, но становятся менее читаемыми для человека


Размер данных - одно из преимуществ Protobuf. Изучите его техники кодирования, они широко применяются во многих высоко оптимизированных системах:
https://victoriametrics.com/blog/go-protobuf/

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
Пакет для синхронизации и асинхронных вычислений в Go

https://github.com/reugn/async

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4
Интерактивное и пошаговое руководство по изучению Git. Команды можно выполнять прямо в статье.

https://antonz.org/git-by-example/

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74
12 лучших ресурсов по Go. Забирайте ссылки:

1. Go Concurrency Rocks: https://concurrency.rocks

2. Go Cookbook: https://go-cookbook.com

3. 100 ошибок в Go и как их избежать: https://100go.co

4. Практические уроки Go: https://practical-go-lessons.com

5. Распространённые паттерны производительности: https://goperf.dev/01-common-patterns/

6. Практические сетевые паттерны: https://goperf.dev/02-networking/

7. Изучение Go с помощью тестов: https://quii.gitbook.io/learn-go-with-tests

8. Гайд по профилированию, трейсингу и наблюдаемости в Go: https://github.com/DataDog/go-profiler-notes/blob/main/guide/README.md

9. Go Class: https://youtube.com/playlist?list=PLoILbKo9rG3skRCj37Kn5Zj803hhiuRK6

10. Дорожная карта по Go: https://roadmap.sh/golang

11. Серия «Go в VictoriaMetrics»: https://victoriametrics.com/blog/categories/go-@-victoriametrics/

12. Практические советы по Go: https://github.com/func25/go-practical-tips/blob/main/tips.md


👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥65
Кэш на Go, CAS-безопасный, с одиночными элементами, валидируемыми при чтении, валидацией пакетного Set, подключаемыми провайдерами/кодеками и опциональными общими поколениями

https://github.com/unkn0wn-root/cascache

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
7
Основные команды Docker-контейнера (шпаргалка)

Запуск контейнеров, подключение к ним и выполнение команд внутри контейнеров — это ключевые операции по управлению контейнерами

Максимально наглядное объяснение их на одной диаграмме

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍4