Если вы использовали
чтобы узнать лучшие практики, которые не только помогут вашей команде быстрее разбираться в проблемах, но и упростят жизнь вашим DevOps
👉 @GolangPortal
slog, Uber Zap, Logrus, Zerolog и другие библиотеки для структурированного логирования, прочитайте эту статью: https://victoriametrics.com/blog/victorialogs-concepts-message-time-stream/чтобы узнать лучшие практики, которые не только помогут вашей команде быстрее разбираться в проблемах, но и упростят жизнь вашим DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4
Вышел Go 1.25.0!
🔹 Release notes: https://go.dev/doc/go1.25
🔹 Скачать: https://go.dev/dl/#go1.25.0
👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍3❤1🤯1
Быстрый, современный генератор документации для Go. Использует идиоматичную работу с конкурентностью, минимальное количество зависимостей и чистые HTML-шаблоны для создания полноценно просматриваемых и фильтруемых страниц документации для Go-кодовых баз
https://github.com/navid-m/arrow
👉 @GolangPortal
https://github.com/navid-m/arrow
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2
От TCP до HTTP. Свежий полный курс: почти 5 часов, бесплатно на YouTube
Весь веб построен на HTTP, и нет лучшего способа понять, как что-то работает, чем реализовать это самостоятельно. В этом курсе мы разберём все тонкости протокола HTTP/1.1 и параллельно с этим напишем свой собственный HTTP-сервер с нуля на Go
https://www.youtube.com/watch?v=FknTw9bJsXM
👉 @GolangPortal
Весь веб построен на HTTP, и нет лучшего способа понять, как что-то работает, чем реализовать это самостоятельно. В этом курсе мы разберём все тонкости протокола HTTP/1.1 и параллельно с этим напишем свой собственный HTTP-сервер с нуля на Go
https://www.youtube.com/watch?v=FknTw9bJsXM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥5👍4
google/wire теперь в архиве, потому что считается завершённым, а не устаревшим
Тем не менее, лучше избегать DI-фреймворков и собирать зависимости вручную.
Конструкторы и мелкие пакеты делают зависимости очевидными и снижают риск неожиданных сюрпризов. Это также заставляет больше продумывать дизайн.
Если проект уже построен вокруг DI-фреймворка или бизнес-требования слишком сложны для ручной сборки, использовать его нормально. Предпочтительный выбор —
👉 @GolangPortal
Тем не менее, лучше избегать DI-фреймворков и собирать зависимости вручную.
Конструкторы и мелкие пакеты делают зависимости очевидными и снижают риск неожиданных сюрпризов. Это также заставляет больше продумывать дизайн.
Если проект уже построен вокруг DI-фреймворка или бизнес-требования слишком сложны для ручной сборки, использовать его нормально. Предпочтительный выбор —
google/wire, а не uber/dig или fx, так как динамическая сборка зависимостей нежелательна; явная сборка на этапе компиляции всегда лучше.Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3
Создание игр на Go для абсолютных новичков
Статья призывает разработчиков вернуть интерес к кодингу, создавая простые игры на Go с библиотекой Ebitengine, и объясняет базовые принципы геймдева на практике😏
https://threedots.tech/post/making-games-in-go/
👉 @GolangPortal
Статья призывает разработчиков вернуть интерес к кодингу, создавая простые игры на Go с библиотекой Ebitengine, и объясняет базовые принципы геймдева на практике
https://threedots.tech/post/making-games-in-go/
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
- HTTP-запросы
- MQTT publish/subscribe
https://sqlpkg.org/?q=litesql
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4🌚2
Это должно быть обязательным к прочтению гайдом по проектированию RESTful API:
https://opensource.zalando.com/restful-api-guidelines/
👉 @GolangPortal
https://opensource.zalando.com/restful-api-guidelines/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🤔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
Гид для опытных разработчиков по освоению дженериков в Go, от базовых концепций до практического применения
https://medium.com/@sogol.hedayatmanesh/generics-in-go-from-basics-to-advanced-for-senior-developers-887790b018d0
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2🔥2
В Go 1.25 на Linux по умолчанию включён Container-aware GOMAXPROCS
Если вы не в курсе, в чём именно проблема с
Что важно знать:
1. Фича активируется только тогда, когда Go-программа запущена внутри cgroup с выставленными CPU-лимитами.
Если вы запускаете Go напрямую на Linux-машине (не в контейнере) или если у контейнера не заданы CPU-лимиты, рантайм не увидит никаких ограничений от cgroup и будет вести себя по-старому — использовать все доступные CPU-ядра.
2. Рантайм Go не выставляет
В Go есть специальная горутина — system monitor (sysmon), которая работает в фоне и выполняет разные служебные задачи. Этот system monitor периодически вызывает логику container-aware
Если вы явно задали
3. Формула:
Минимальное значение
Например: если задать лимит контейнера
Обратите внимание, что CPU affinity отличается от CPU limits:
- CPU affinity говорит: «ты можешь выполняться только на этих конкретных ядрах» (например, ядра 2, 4, 6, 8).
- CPU limits говорят: «ты можешь использовать вот столько процессорного времени» (например, эквивалент 2.5 ядер по времени выполнения).
В большинстве обычных случаев
👉 @GolangPortal
Если вы не в курсе, в чём именно проблема с
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-ядер на ноде.Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍7
Нашел годный ресурс, где автор пишет статьи по System Design. Внутри очень много схем и все они похоже отрисованы автором вручную для каждой статьи. Контент качественный, излагается почти в том порядке как на реальном интервью.
https://systemdesign.one/real-time-presence-platform-system-design/
👉 @GolangPortal
https://systemdesign.one/real-time-presence-platform-system-design/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍5👀1
Механика работы
- Почему в
- Как
- Что такое проблема false sharing?
- Как устроен
- Как работает механизм stealing в
- Почему в Go прямо указано: «Любой объект, положенный в Pool, может быть удалён автоматически в любой момент без уведомления»?
Кто ещё не читал, рекомендую✌️
👉 @GolangPortal
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, может быть удалён автоматически в любой момент без уведомления»?
Кто ещё не читал, рекомендую
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤3👍3
Golang Portal
В Go 1.25 на Linux по умолчанию включён Container-aware GOMAXPROCS Если вы не в курсе, в чём именно проблема с GOMAXPROCS, почитайте вот это: https://victoriametrics.com/blog/kubernetes-cpu-go-gomaxprocs/ Что важно знать: 1. Фича активируется только тогда…
Круто, а вот и команда Go выпустила статью на эту тему
https://go.dev/blog/container-aware-gomaxprocs
👉 @GolangPortal
https://go.dev/blog/container-aware-gomaxprocs
Please open Telegram to view this post
VIEW IN TELEGRAM
go.dev
Container-aware GOMAXPROCS - The Go Programming Language
New GOMAXPROCS defaults in Go 1.25 improve behavior in containers.
👍7❤4
Anubis
Опенсорсный проект на Go, использующий Proof-of-Work для защиты от AI-скрейперов. Стартовал в январе, уже собрал 200k+ скачиваний и стоит в продакшене у GNOME, FFmpeg, FreeBSD, lore.kernel.org и других крупных ресурсов
https://github.com/TecharoHQ/anubis
👉 @GolangPortal
Опенсорсный проект на Go, использующий Proof-of-Work для защиты от AI-скрейперов. Стартовал в январе, уже собрал 200k+ скачиваний и стоит в продакшене у GNOME, FFmpeg, FreeBSD, lore.kernel.org и других крупных ресурсов
https://github.com/TecharoHQ/anubis
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5🤔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
В полной статье есть и другие паттерны: https://divan.dev/posts/go_concurrency_visualize/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4🔥3
Go-драйвер для SQL, который позволяет выполнять запросы к CSV, TSV и LTSV-файлам, используя синтаксис SQL из SQLite3. Запрашивайте данные напрямую из файлов без каких-либо импортов или преобразований
https://github.com/nao1215/filesql
👉 @GolangPortal
https://github.com/nao1215/filesql
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - nao1215/filesql: sql driver for CSV, TSV, LTSV, Parquet, Excel with gzip, bzip2, xz, zstd support.
sql driver for CSV, TSV, LTSV, Parquet, Excel with gzip, bzip2, xz, zstd support. - nao1215/filesql
❤8👍5
Как работает Protobuf
Размер данных - одно из преимуществ Protobuf. Изучите его техники кодирования, они широко применяются во многих высоко оптимизированных системах:
https://victoriametrics.com/blog/go-protobuf/
👉 @GolangPortal
Protobuf (Protocol Buffers) — это способ сериализовать данные в компактный бинарный формат. За счёт этого они занимают меньше места и быстрее гоняются по сети, но становятся менее читаемыми для человека
Размер данных - одно из преимуществ Protobuf. Изучите его техники кодирования, они широко применяются во многих высоко оптимизированных системах:
https://victoriametrics.com/blog/go-protobuf/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Интерактивное и пошаговое руководство по изучению Git. Команды можно выполнять прямо в статье.
https://antonz.org/git-by-example/
👉 @GolangPortal
https://antonz.org/git-by-example/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4