Вы, вероятно, слышали о gRPC, если еще не использовали её. Она особенно популярна для межсервисной связи благодаря своей эффективности, языковой независимости и встроенной поддержке таких вещей, как MTLS.
Выше представлен простой пример начала работы с gRPC от Matt Boyle.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Полезные приемы форматирования
Вот несколько приемов форматирования, которые могут быть вам полезны:
1️⃣ Закавыченная строка
Используйте
2️⃣ Названия полей структуры
Используйте
3️⃣ Тип значения
Используйте
4️⃣ Индекс аргумента
Можно явно указать, какой по порядку аргумент выводить. Полезно, если одно и то же значение выводится несколько раз (как в примере с
Нумерация с 1.
👉 @juniorGolang
Вот несколько приемов форматирования, которые могут быть вам полезны:
Используйте
%q, чтобы вывести строковое значение в кавычках.s := "Hello, World!"
fmt.Printf("%q\n", s)
// "Hello, World!"
Используйте
%+v, чтобы вывести названия полей структуры, а не только значения.alice := person{"Alice", 25}
fmt.Printf("%+v\n", alice)
// {name:Alice age:25}Используйте
%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}
Можно явно указать, какой по порядку аргумент выводить. Полезно, если одно и то же значение выводится несколько раз (как в примере с
val выше).num := 42
fmt.Printf("%[1]T: %[1]v\n", num)
// int: 42
Нумерация с 1.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤8
Анонимная сеть в 100 строк кода на Go
👉 Читать статью
👉 @juniorGolang | #cтатья
Прошло уже более года с тех пор как я написал статью - Анонимная сеть в 200 строк кода на Go. Пересмотрев её однажды осенним вечером я понял насколько всё в ней было ужасно - начиная с самого поведения логики кода и заканчивая его избыточностью. Сев за ноутбук и потратив от силы 20 минут у меня получилось написать сеть всего в 100 строк кода, используя лишь и только стандартную библиотеку языка.
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 проста в использовании благодаря интуитивно понятному встроенному API:
id, err := box.Put(&Person{ FirstName: "Joe", LastName: "Green" })
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Release ObjectBox Go Database v1.8.0 · objectbox/objectbox-go
In-memory databases (provide a "directory" option like "memory:" + DB name)
Update objectbox-c to v0.21.0 with many improvements (details)
Fix leaking IDs with Box
Docs and pre...
Update objectbox-c to v0.21.0 with many improvements (details)
Fix leaking IDs with Box
Docs and pre...
👍11
В чем сила пакета singleflight?
🔹
🔹 Если несколько запросов инициируют один и тот же вызов, это может привести к множественным идентичным вызовам к БД или API. Это создает нагрузку на систему, ведет к потерям CPU, памяти и пропускной способности сети.
🔹 Matthew Boyle, автор Domain-Driven Design with Golang, приводит пример использования
💡
👉 @juniorGolang | #tips
singleflight предоставляет механизм подавления дублирующихся вызовов функций. Например, наше приложение запрашивает данные из API или базы данных. singleflight для устранения дублирующихся вызовов. В примере, несмотря на то, что 5 горутин одновременно запрашивают данные для одного и того же ключа, функция fetchData будет вызвана только один раз благодаря функции group.Do из пакета singleflight.singleflight также может используется в serverless кейсах. Google App Engine, например, применяет его как часть функции инициализации, поскольку там нет main.go.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 | #ресурсы
Spot — это простой, кроссплатформенный, реактивный GUI-инструментарий для Go, использующий нативные виджеты там, где это возможно.
Большой акцент при разработке Spot был сделан на простоту использования и предоставление согласованного API на разных платформах
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Подборка из 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 | #ресурсы
Это 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🌚1
Build an OTP-Based Authentication Server with Go
В серии из двух статей автор Vishal Axl подробно рассказывает, как создать сервер аутентификации на основе одноразовых паролей (OTP) с использованием языка Go.
👉 Первая часть посвящена настройке структуры проекта, Docker-среды и базовой HTTP-маршрутизации.
👉 Вторая часть фокусируется на реализации генерации OTP, управлении сроком их действия и организации временного хранилища данных.
👉 @juniorGolang | #cтатья
В серии из двух статей автор Vishal Axl подробно рассказывает, как создать сервер аутентификации на основе одноразовых паролей (OTP) с использованием языка Go.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Популярный генератор статических сайтов на базе Go, и этот инструмент позволяет легко конвертировать в него блоги на базе WordPress, включая множество особых случаев, в которых WordPress REST API не помогает.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Создание Go-приложений на базе LLM
Retrieval Augmented Generation (RAG) позволяет предоставлять LLM знания из кастомных ресурсов, от локальных текстовых файлов до репозиториев кода. Затем LLM может использовать эти новые знания для ответов на вопросы.
🔛 Читать
👉 @juniorGolang | #cтатья
Retrieval Augmented Generation (RAG) позволяет предоставлять LLM знания из кастомных ресурсов, от локальных текстовых файлов до репозиториев кода. Затем LLM может использовать эти новые знания для ответов на вопросы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Откопал тут годный инструмент — библиотека GoMailer для Go🍌
Это мощная штука, построенная на стандартном net/smtp, но с кучей плюшек. Например, отправка писем с HTML и вложениями, удобная работа с заголовками, гибкая настройка TLS и аутентификации.
Подключить можно через go get, а настроить — проще простого
🔛 GoMailer
👉 @juniorGolang | #ресурсы
Это мощная штука, построенная на стандартном net/smtp, но с кучей плюшек. Например, отправка писем с HTML и вложениями, удобная работа с заголовками, гибкая настройка TLS и аутентификации.
Подключить можно через go get, а настроить — проще простого
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - NawafSwe/gomailer: A Go library built on top of the standard net/smtp package, providing enhanced features for sending…
A Go library built on top of the standard net/smtp package, providing enhanced features for sending emails effortlessly. - NawafSwe/gomailer
🔥14❤2👍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татья
HTTP/2 является значительным улучшением по сравнению с HTTP/1.1, решая проблему блокировки "head-of-line" на уровне приложения путем мультиплексирования нескольких потоков через одно TCP-соединение.
В статье подробно рассматривается, как HTTP/2 достигает этого, а также описываются шаги по его включению в Go-приложениях.
Стандартная библиотека Go поддерживает HTTP/2 по умолчанию при использовании HTTPS, и с некоторой конфигурацией его можно настроить для работы поверх обычного HTTP.
Для получения более подробной информации рекомендуется ознакомиться с полной статьей
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Тест из 76 вопросов на знание Go
Тест основан на вопросах по Go, собранных с LinkedIn, эти вопросы особенно часто попадаются на собеседованиях
⛓ Ссылка: тык
👉 @juniorGolang | #ресурсы
Тест основан на вопросах по Go, собранных с LinkedIn, эти вопросы особенно часто попадаются на собеседованиях
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
— Что такое контекст?
— Создание контекста
— Распространение контекста
— Получение значений из контекста
— Отмена контекста
— Timeouts и deadlines
— Контекст в HTTP-запросах
— Контекст в операциях с базой данных
— Лучшие практики использования контекста
— Распространенные ошибки, которых следует избегать
— Утечки контекста и горутины
— Использование контекста со сторонними библиотеками
— Контекст (новые функции, добавленные в Go 1.21)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4
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 сделает сам, обеспечивая бесшовный опыт, похожий на продакшн, прямо на вашей машине
Установка:
Потом можно проверить установку командой
Чтобы начать, запускаем
👉 @juniorGolang | #ресурсы
С его помощью можно легко управлять кучей локальных сервисов, присваивая им нормальные доменные имена вместо стандартных 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 — и всё, можно пользоваться.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤3👍2
Go Slices and Subslices: понимание общей памяти и избегание подводных камней функции append()
Обсуждаются принципы работы срезов, их емкость и случаи, когда изменения в подсрезе могут затронуть исходный срез.
Приводятся примеры ошибок и советы, как их избежать, уделяя внимание управлению памятью и правильному использованию append().
👉 Прочитать подробнее можно здесь
👉 @juniorGolang | #cтатья
Обсуждаются принципы работы срезов, их емкость и случаи, когда изменения в подсрезе могут затронуть исходный срез.
Приводятся примеры ошибок и советы, как их избежать, уделяя внимание управлению памятью и правильному использованию append().
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2