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

Связь: @devmangx
Download Telegram
Пакет resend-go предоставляет удобный способ отправки email-сообщений в Go-приложениях через Resend API

https://github.com/resend/resend-go

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍93
В этом видео автор делится шестью своими любимыми инструментами для разработки на Go, которые, как он считает, должен попробовать каждый.

Он рассказывает о таких утилитах, как sqlc, goose, goreleaser, go-blueprint, godotenv и air

Смотреть на YouTube

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍31😁1
В Go каждая переменная и каждый импорт в коде должны использоваться — иначе компилятор выбросит ошибку. Это помогает ускорить компиляцию, но бывают случаи, когда хочется обойти это поведение. В таких ситуациях в качестве заглушки можно использовать пустой идентификатор (_)

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍6
Logging in Go with Slog: A Practitioner’s Guide

Практическое руководство по работе с встроенным пакетом log/slog (доступен с Go 1.21), от основ до продвинутых подходов структурированного логирования. Вы научитесь создавать информативные и полезные логи, которые упростят отладку и мониторинг приложений

https://www.dash0.com/guides/logging-in-go-with-slog

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍106
Этот сайт, отличное место для изучения паттернов конкурентности в Go: https://concurrency.rocks

Концепция простая, но интерфейс — стильный и хорошо продуманный. Ещё круче то, что всё работает на Go с использованием WebAssembly, так что сервер вообще не нужен

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
20🔥8👍6🏆1
Чанкер от Plakar

Разрабы из Plakar выпустили пакет go-cdc-chunkers — инструмент для контентно-зависимого разбиения данных на фрагменты переменного размера. Он устойчив к сдвигам и изменениям, отлично подходит для дедупликации, дельта-кодирования, отслеживания изменений и других задач

В статье рассказывается, как работает пакет и как его использовать

🔹Читать

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥2
CLI-инструмент на Go для работы с базами данных | SQLite, libSQL, PostgreSQL, MySQL, MariaDB

https://github.com/gigagrug/schema

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍3
Используй sync.Once для однократной инициализации значения. Например, при загрузке переменных окружения можно воспользоваться sync.Once, чтобы гарантировать, что переменные будут загружены только один раз, а затем считывались из памяти при каждом обращении

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍8
Эффективная конкурентность в Go с использованием select

В языке программирования Go горутины и каналы — это ключевые концепции при работе с конкурентностью. Они помогают решать множество задач, связанных с параллельным выполнением.

В этой статье основное внимание уделяется конструкции select, которая служит мостом для координации нескольких каналов.

🔹Читать

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3
Вышел релиз-кандидат Go 1.25 RC3

• Репортите баги: https://go.dev/issue/new

• Анонс: https://groups.google.com/g/golang-announce/c/sTNnwCTjr1Y/m/tdIX-dDUAgAJ

• Скачать: https://go.dev/dl/#go1.25rc3

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥4
Используй errors.Is и errors.As для проверки ошибок. Эти функции работают с обёрнутыми ошибками, позволяя получить доступ к исходной ошибке

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍6🌚2
Официальный блог Go недавно опубликовал пост, в котором подробно рассказывается об использовании testing.B.Loop для более точного бенчмаркинга.

В статье объясняется, как эта функция помогает точнее измерять производительность и, как следствие, писать более эффективный код

https://go.dev/blog/testing-b-loop

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83
Go 1.25, релиз которого запланирован на конец этого месяца, делает GOMAXPROCS по-настоящему “container-aware”, предотвращая переоценку доступного CPU-ресурса в Docker или Kubernetes.

Когда-то, в более простые времена, до появления Docker и Kubernetes (которые, к слову, сами написаны на Go) Go-программа на старте определяла свой CPU-лимит через runtime.GOMAXPROCS(0), и разработчики могли без забот запускать горутины, ориентируясь на это фиксированное значение.

С приходом контейнеризации несколько приложений стали делить одно и то же железо. K8S и Docker используют Cgroups для применения CPU-квот и CPUset’ов. Однако процесс на Go ошибочно считал, что у него есть доступ ко всем ядрам хоста, даже если реально он был ограничен, например, двумя ядрами по времени процессора.

Это приводило к конкуренции за ресурсы, падению производительности и необходимости тянуть сторонний пакет uber-go/automaxprocs, чтобы не наступить на эти грабли 😎

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥157👍6
Модульный бэкенд для e-commerce с GraphQL-шлюзом и gRPC-микросервисами для управления аккаунтами, товарами, заказами и рекомендациями.

https://github.com/rasadov/EcommerceAPI

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5
Используйте пустой цикл for, чтобы создать бесконечный цикл в Go. Это может быть полезно в ряде случаев, например, для продолжения выполнения работы до завершения приложения или получения сигнала на остановку

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯18👍71
How to manage configuration settings in Go web applications

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

В этой статье представлены полезные рекомендации по эффективным методам управления конфигурацией

🔹Читать

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71👎1
WaitGroup.Go в Go 1.25 — это действительно изменение, упрощающее жизнь. Я видел (и сам допускал) ошибку, когда wg.Add(1) вызывался внутри горутины, и вот теперь эта проблема наконец ушла

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
31👍16🤔2
Пакет 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


👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍114
Если вы использовали slog, Uber Zap, Logrus, Zerolog и другие библиотеки для структурированного логирования, прочитайте эту статью: https://victoriametrics.com/blog/victorialogs-concepts-message-time-stream/

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

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