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

Связь: @devmangx
Download Telegram
Media is too big
VIEW IN TELEGRAM
Go стал ещё быстрее…

Скоро выйдет Go 1.25, и он наконец-то делает язык быстрее. Это обновление включает ключевые улучшения, устраняющие давние проблемы и повышающие производительность Go для разработчиков

Примечания к релизу Go 1.25:
https://tip.golang.org/doc/go1.25

Смотреть видео на YouTube

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍8
Go-проект для развертывания контейнеризованных приложений в виде платформы веб-приложений для внутренних инструментов. Clace поддерживает Linux, Windows и OSX, предоставляя GitOps-подход для управления веб-приложениями

https://github.com/claceio/clace

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🤔1
context.Value — не наш друг

Поговорим о плохом паттерне в Go, особенно актуальном для новичков

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

Например, функция A может получить запись о платеже из базы данных и положить её в контекст, а функция C затем извлекает её, находясь где-то далеко.

Это кажется удобным, потому что:

🔹Мы можем не передавать данные в функции вроде B, которым они не нужны.

🔹Мы можем хранить и получать все нужные данные из ctx.

🔹Нет необходимости добавлять payment в список аргументов.

"Почему бы просто не вызвать функцию C из функции A?"


Есть множество причин; например, C является частью логики B и использует аргументы, полученные от B.

Так в чём же проблема?

Вот где начинаются сложности:

🔹Мы отказываемся от проверки типов, которую предоставляет компилятор Go.

🔹Мы кладём данные в "чёрный ящик" и надеемся позже их оттуда достать — спустя неделю это может быть как поиск вслепую.

🔹Данные о платеже выглядят как необязательные, хотя на самом деле они важны.

На мой взгляд, главная проблема использования ctx.Value — это чрезмерная неявность. Данные "прячутся" в контексте, и отследить их становится сложно.

Неявность может быть вредной, даже если к ней легко привыкнуть.



Итак, когда же стоит использовать context.Value()?

Я бы рекомендовал избегать его, когда это возможно. Тем не менее, в документации Go указано, что он полезен для "передачи значений, связанных с запросом, через границы API и между процессами".

Имеет смысл применять его для передачи данных, связанных с запросом, таких как:

🔹Время начала обработки запроса

🔹IP-адрес вызывающей стороны

🔹Trace ID и Span ID

🔹HTTP-маршрут, который вызывается



"Разве payment не относится к запросу?"


Если payment нужен во многих функциях цепочки, лучше передавать его явно. Это делает очевидным, что функция работает с payment, не читая тело запроса.

Я бы избегал передачи бизнес-данных через context.

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1812
Скоро в Go 1.25: Эволюция JSON в Go — от v1 к v2

Вторая версия пакета json, которая появится в Go 1.25, представляет собой крупное обновление с множеством несовместимых изменений. Пакет v2 добавляет новые возможности, исправляет проблемы с API и поведение, а также значительно улучшает производительность.

Давайте посмотрим, что изменилось:
https://antonz.org/go-json-v2/

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍155
Опенсорсная современная веб-панель управления для администрирования Linux-серверов.

https://github.com/1Panel-dev/1Panel

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍4
Генерация превью для видео на Go с помощью биндингов ffmpeg

Работаешь с видео на Go? Биндинги ffmpeg-go позволяют использовать всю мощь FFmpeg, не выходя из Go-кода. Вот практичный кейс: нужно сгенерировать превью из видео на конкретном таймстампе

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍104🤯3
Выходные должны быть весёлыми... Итак:

Invaders — создаём ремейк Space Invaders с использованием Ebitengine и Go

https://idiotcoder.com/invaders

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍2🔥2
Интерактивный тур по Go 1.25

Релиз Go 1.25 запланирован на август, так что сейчас хорошее время посмотреть, что нового

https://antonz.org/go-1-25/

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍125
This media is not supported in your browser
VIEW IN TELEGRAM
Обширная коллекция практичных фрагментов кода, примеров и рецептов на Go для создания эффективных, надёжных и масштабируемых приложений

https://go-cookbook.com

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥4👍3
Google OAuth2 Login на Go: минималистичное и полноценное руководство

Руководство по реализации входа через Google OAuth2 на Go без лишних фреймворков — только net/http и стандартные библиотеки. Пошаговый разбор: от настройки OAuth-клиента в Google Cloud Console до обработки login-флоу и получения данных пользователя

https://medium.com/@aynacialiriza/google-oauth2-login-in-go-a-minimal-and-complete-guide-0e9af75908de

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍204🏆2
Трюк с ...type в Go, который вы, скорее всего, не используете (вариативность)

В Go, когда вы видите func(name ...Type), это вариативная функция. Это значит, что функция может принимать любое количество аргументов указанного типа. Внутри это просто срез, но с синтаксическим сахаром, позволяющим удобно передавать несколько значений.

Отлично подходит для функций, где количество аргументов заранее неизвестно (например, fmt.Println()).

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍236👎2
Продвинутая работа с очередями в Go

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

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

https://medium.com/@danielabatibabatunde1/mastering-queues-in-golang-be77414abe9e

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍86
Проект для захвата выполнения Go-программы путём взаимодействия с сервером отладчика Delve, с извлечением значений переменных и информации о стеке всех горутин на каждом операторе Go

https://github.com/ahmedakef/gotutor

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍2👀1
Серия задач по программированию, которые помогут подготовиться к техническим собеседованиям на Go. Решай задачи, отправляй свои решения и сразу получай фидбэк благодаря автоматическому тестированию.

https://github.com/RezaSi/go-interview-practice

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥5👍3
Будьте осторожны при чтении тела HTTP-запроса с помощью io.ReadAll.

Это просто и быстро, но если вы работаете с большим файлом, он полностью загрузится в память.

Вместо этого рассмотрите вариант чтения файла по частям или стриминга с использованием, например, io.Copy

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

https://dev.to/jones_charles_ad50858dbc0/graceful-goroutine-shutdowns-in-go-a-practical-guide-2b9a

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64
Лёгкий инструмент для деплоя и управления контейнеризированными приложениями в сети Docker-хостов. Закрывает разрыв между Docker и Kubernetes

https://github.com/psviderski/uncloud

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63
Рассматривайте возможность возвращать функции очистки при создании объектов. Это помогает убедиться, что этап освобождения ресурсов не будет забыт и его легко обрабатывать с помощью оператора defer в Go.

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍212
Используйте структурированный логгер Go (slog) с контекстом. Добавляйте и извлекайте логгер из контекста. Добавляйте атрибуты в контекст. Автоматически считывайте любые пользовательские значения из контекста, такие как OpenTelemetry TraceID

https://github.com/veqryn/slog-context

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3👎1
Шифрование и дешифрование в Go: практическое руководство

В этом руководстве мы подробно разберём, как работает шифрование и дешифрование в Go, на практике — с примерами кода, которые можно собрать и запустить. Мы охватим базовые темы: от симметричного до асимметричного шифрования, с понятными объяснениями и чистым кодом.


https://dev.to/shrsv/encryption-and-decryption-in-go-a-hands-on-guide-3bcl

👉 @GolangPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84
Простой загрузчик конфигураций для Go, который читает и отслеживает изменения из файла, переменных окружения, флагов командной строки и облачных провайдеров (AWS, Azure, GCP).

https://github.com/nil-go/konf

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