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

Связь: @devmangx
Download Telegram
💡 gRPC и Go на практике

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

Выше представлен простой пример начала работы с gRPC от Matt Boyle.

👉 @juniorGolang | #tip
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Полезные приемы форматирования

Вот несколько приемов форматирования, которые могут быть вам полезны:

1️⃣ Закавыченная строка

Используйте %q, чтобы вывести строковое значение в кавычках.

s := "Hello, World!"
fmt.Printf("%q\n", s)
// "Hello, World!"


2️⃣ Названия полей структуры

Используйте %+v, чтобы вывести названия полей структуры, а не только значения.

alice := person{"Alice", 25}
fmt.Printf("%+v\n", alice)
// {name:Alice age:25}


3️⃣ Тип значения

Используйте %T, чтобы вывести тип значения.

var val any
val = 42
fmt.Printf("%T: %v\n", val, val)
// int: 42

val = "Hello, World!"
fmt.Printf("%T: %v\n", val, val)
// string: Hello, World!

val = person{"Alice", 25}
fmt.Printf("%T: %v\n", val, val)
// main.person: {Alice 25}


4️⃣ Индекс аргумента

Можно явно указать, какой по порядку аргумент выводить. Полезно, если одно и то же значение выводится несколько раз (как в примере с val выше).

num := 42
fmt.Printf("%[1]T: %[1]v\n", num)
// int: 42


Нумерация с 1.

👉 @juniorGolang
Please open Telegram to view this post
VIEW IN TELEGRAM
👍158
Анонимная сеть в 100 строк кода на Go

Прошло уже более года с тех пор как я написал статью - Анонимная сеть в 200 строк кода на Go. Пересмотрев её однажды осенним вечером я понял насколько всё в ней было ужасно - начиная с самого поведения логики кода и заканчивая его избыточностью. Сев за ноутбук и потратив от силы 20 минут у меня получилось написать сеть всего в 100 строк кода, используя лишь и только стандартную библиотеку языка.


👉 Читать статью

👉 @juniorGolang | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥9
Нашли для вас два классных ресурса, которые помогут разобраться в GIT

🔜 Learn Git Branching — это интерактивный учебник по Git, направленный на закрепление теории прохождением наглядной практики.

🔜 Oh My Git! — игра для обучения Git. Там визуализируются внутренние структуры репозиториев. Игра опенсорс, так что можно покопаться в исходниках

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
⚙️ ObjectBox Go — встроенная база данных, которую можно использовать как альтернативу SQLite, gorm и т. д

ObjectBox проста в использовании благодаря интуитивно понятному встроенному API:


id, err := box.Put(&Person{ FirstName: "Joe", LastName: "Green" })


👉 Документация
👉 GitHub

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
В чем сила пакета singleflight?

🔹singleflight предоставляет механизм подавления дублирующихся вызовов функций. Например, наше приложение запрашивает данные из API или базы данных.

🔹Если несколько запросов инициируют один и тот же вызов, это может привести к множественным идентичным вызовам к БД или API. Это создает нагрузку на систему, ведет к потерям CPU, памяти и пропускной способности сети.

🔹Matthew Boyle, автор Domain-Driven Design with Golang, приводит пример использования singleflight для устранения дублирующихся вызовов. В примере, несмотря на то, что 5 горутин одновременно запрашивают данные для одного и того же ключа, функция fetchData будет вызвана только один раз благодаря функции group.Do из пакета singleflight.

💡 singleflight также может используется в serverless кейсах. Google App Engine, например, применяет его как часть функции инициализации, поскольку там нет main.go.

👉 @juniorGolang | #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Набор инструментов на Go для создания React-like GUI

Spot — это простой, кроссплатформенный, реактивный GUI-инструментарий для Go, использующий нативные виджеты там, где это возможно.
Большой акцент при разработке Spot был сделан на простоту использования и предоставление согласованного API на разных платформах

Ссылка: тык

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
Подборка из 25 полезных ресурсов для разработчиков на Go

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

👉 https://dev.to/0x3d_site/25-golang-resources-every-developer-will-find-helpful-and-interesting-1ooh

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Недавно наткнулся на интересную штуку — Go Blueprint.

Это CLI-инструмент, который позволяет быстро развернуть проект на Go с уже настроенной структурой.

Можно выбрать один из популярных фреймворков, таких как Chi, Gin, Fiber и другие. Кроме того, поддерживаются различные базы данных: MySQL, Postgres, SQLite, MongoDB и даже Redis

Плюс, есть прикольные фичи, такие как поддержка HTMX, настройка CI/CD через GitHub Actions, интеграция с Docker и даже генерация фронтенда на React с TypeScript.

Если хотите заценить, как это работает, вот видеообзор: https://youtu.be/-8XKrQUexrQ?si=KxwnMPDfT-DXM6sx

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🌚1
Build an OTP-Based Authentication Server with Go

В серии из двух статей автор Vishal Axl подробно рассказывает, как создать сервер аутентификации на основе одноразовых паролей (OTP) с использованием языка Go.

👉 Первая часть посвящена настройке структуры проекта, Docker-среды и базовой HTTP-маршрутизации.

👉 Вторая часть фокусируется на реализации генерации OTP, управлении сроком их действия и организации временного хранилища данных.

👉 @juniorGolang | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
⚙️ wp2hugo — инструмент для миграции блогов с WordPress на Hugo, написанный на Go

Популярный генератор статических сайтов на базе Go, и этот инструмент позволяет легко конвертировать в него блоги на базе WordPress, включая множество особых случаев, в которых WordPress REST API не помогает.

🔛 GitHub

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Создание Go-приложений на базе LLM

Retrieval Augmented Generation (RAG) позволяет предоставлять LLM знания из кастомных ресурсов, от локальных текстовых файлов до репозиториев кода. Затем LLM может использовать эти новые знания для ответов на вопросы.

🔛 Читать

👉 @juniorGolang | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Откопал тут годный инструмент — библиотека GoMailer для Go🍌

Это мощная штука, построенная на стандартном net/smtp, но с кучей плюшек. Например, отправка писем с HTML и вложениями, удобная работа с заголовками, гибкая настройка TLS и аутентификации.

Подключить можно через go get, а настроить — проще простого

🔛 GoMailer

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥142👍1
How HTTP/2 Works and How to Enable It in Go

HTTP/2 является значительным улучшением по сравнению с HTTP/1.1, решая проблему блокировки "head-of-line" на уровне приложения путем мультиплексирования нескольких потоков через одно TCP-соединение.

В статье подробно рассматривается, как HTTP/2 достигает этого, а также описываются шаги по его включению в Go-приложениях.

Стандартная библиотека Go поддерживает HTTP/2 по умолчанию при использовании HTTPS, и с некоторой конфигурацией его можно настроить для работы поверх обычного HTTP.

Для получения более подробной информации рекомендуется ознакомиться с полной статьей

👉 @juniorGolang | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Тест из 76 вопросов на знание Go

Тест основан на вопросах по Go, собранных с LinkedIn, эти вопросы особенно часто попадаются на собеседованиях

Ссылка: тык

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
The_Complete_Guide_to_Context_in_Golang_Efficient_Concurrency_Management.pdf
3.1 MB
⚡️ Полный гайд по работе с пакетом context в Go: эффективное управление конкурентностью

— Что такое контекст?
— Создание контекста
— Распространение контекста
— Получение значений из контекста
— Отмена контекста
— Timeouts и deadlines
— Контекст в HTTP-запросах
— Контекст в операциях с базой данных
— Лучшие практики использования контекста
— Распространенные ошибки, которых следует избегать
— Утечки контекста и горутины
— Использование контекста со сторонними библиотеками
— Контекст (новые функции, добавленные в Go 1.21)

🔜 Источник

👉 @juniorGolang | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍104
This media is not supported in your browser
VIEW IN TELEGRAM
Novus — локальный HTTPS-прокси, который превращает работу на macOS в удовольствие

С его помощью можно легко управлять кучей локальных сервисов, присваивая им нормальные доменные имена вместо стандартных localhost. Плюс, у него встроенная поддержка HTTPS, так что все домены по умолчанию защищены.

Под капотом у Novus работают старые добрые Nginx в роли прокси и DNSMasq для определения кастомных доменных резолверов. Больше не нужно ковыряться в /etc/hosts, а SSL-сертификаты автоматически управляются и обновляются с помощью mkcert.

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

Установка:
brew tap jozefcipa/novus
brew install novus


Потом можно проверить установку командой novus -v

Чтобы начать, запускаем novus init, редактируем созданный файл novus.yml, определяем там маппинг доменов, а затем novus serve — и всё, можно пользоваться.

👉 @juniorGolang | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥133👍2
Go Slices and Subslices: понимание общей памяти и избегание подводных камней функции append()

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

Приводятся примеры ошибок и советы, как их избежать, уделяя внимание управлению памятью и правильному использованию append().

👉 Прочитать подробнее можно здесь

👉 @juniorGolang | #cтатья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32