Используй
👉 @GolangPortal
errors.Is и errors.As для проверки ошибок. Эти функции работают с обёрнутыми ошибками, позволяя получить доступ к исходной ошибкеPlease open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍6🌚2
Официальный блог Go недавно опубликовал пост, в котором подробно рассказывается об использовании
В статье объясняется, как эта функция помогает точнее измерять производительность и, как следствие, писать более эффективный код
https://go.dev/blog/testing-b-loop
👉 @GolangPortal
testing.B.Loop для более точного бенчмаркинга. В статье объясняется, как эта функция помогает точнее измерять производительность и, как следствие, писать более эффективный код
https://go.dev/blog/testing-b-loop
Please open Telegram to view this post
VIEW IN TELEGRAM
go.dev
More predictable benchmarking with testing.B.Loop - The Go Programming Language
Better benchmark looping in Go 1.24.
👍8❤3
Go 1.25, релиз которого запланирован на конец этого месяца, делает
Когда-то, в более простые времена, до появления Docker и Kubernetes (которые, к слову, сами написаны на Go) Go-программа на старте определяла свой CPU-лимит через
С приходом контейнеризации несколько приложений стали делить одно и то же железо. K8S и Docker используют Cgroups для применения CPU-квот и CPUset’ов. Однако процесс на Go ошибочно считал, что у него есть доступ ко всем ядрам хоста, даже если реально он был ограничен, например, двумя ядрами по времени процессора.
Это приводило к конкуренции за ресурсы, падению производительности и необходимости тянуть сторонний пакет😎
👉 @GolangPortal
GOMAXPROCS по-настоящему “container-aware”, предотвращая переоценку доступного CPU-ресурса в Docker или Kubernetes.Когда-то, в более простые времена, до появления Docker и Kubernetes (которые, к слову, сами написаны на Go) Go-программа на старте определяла свой CPU-лимит через
runtime.GOMAXPROCS(0), и разработчики могли без забот запускать горутины, ориентируясь на это фиксированное значение.С приходом контейнеризации несколько приложений стали делить одно и то же железо. K8S и Docker используют Cgroups для применения CPU-квот и CPUset’ов. Однако процесс на Go ошибочно считал, что у него есть доступ ко всем ядрам хоста, даже если реально он был ограничен, например, двумя ядрами по времени процессора.
Это приводило к конкуренции за ресурсы, падению производительности и необходимости тянуть сторонний пакет
uber-go/automaxprocs, чтобы не наступить на эти грабли Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤7👍6
Модульный бэкенд для e-commerce с GraphQL-шлюзом и gRPC-микросервисами для управления аккаунтами, товарами, заказами и рекомендациями.
https://github.com/rasadov/EcommerceAPI
👉 @GolangPortal
https://github.com/rasadov/EcommerceAPI
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍5
Используйте пустой цикл
👉 @GolangPortal
for, чтобы создать бесконечный цикл в Go. Это может быть полезно в ряде случаев, например, для продолжения выполнения работы до завершения приложения или получения сигнала на остановкуPlease open Telegram to view this post
VIEW IN TELEGRAM
🤯18👍7❤1
How to manage configuration settings in Go web applications
Изучите лучшие практики управления конфигурационными настройками в веб-приложениях на Go, чтобы ваши приложения были гибкими, поддерживаемыми и адаптируемыми к разным окружениям.
В этой статье представлены полезные рекомендации по эффективным методам управления конфигурацией
🔹 Читать
👉 @GolangPortal
Изучите лучшие практики управления конфигурационными настройками в веб-приложениях на Go, чтобы ваши приложения были гибкими, поддерживаемыми и адаптируемыми к разным окружениям.
В этой статье представлены полезные рекомендации по эффективным методам управления конфигурацией
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1👎1
WaitGroup.Go в Go 1.25 — это действительно изменение, упрощающее жизнь. Я видел (и сам допускал) ошибку, когда wg.Add(1) вызывался внутри горутины, и вот теперь эта проблема наконец ушлаPlease open Telegram to view this post
VIEW IN TELEGRAM
❤31👍16🤔2
Пакет
Вот упрощённый пример:
👉 @GolangPortal
chans предоставляет универсальные операции с каналами, которые помогают строить конкурентные пайплайны в Go. Его цель — быть гибким, ненавязчивым и легко комбинируемым, без лишней абстракции и без отъёма контроля у разработчикаВот упрощённый пример:
// Given a channel of documents.
docs := make(chan []string, 10)
docs <- []string{"go", "is", "awesome"}
docs <- []string{"cats", "are", "cute"}
close(docs)
// Extract all words from the documents.
words := make(chan string, 10)
chans.Flatten(ctx, words, docs)
close(words)
// Calculate the total byte count of all words.
step := func(acc int, word string) int { return acc + len(word) }
count := chans.Reduce(ctx, words, 0, step)
fmt.Println("byte count =", count)
// byte count = 22
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤4
Если вы использовали
чтобы узнать лучшие практики, которые не только помогут вашей команде быстрее разбираться в проблемах, но и упростят жизнь вашим 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