37.1K subscribers
1.46K photos
33 videos
5 files
1.62K links
加入频道
👣 Создание сервера Golang с gRPC и Rest API при помощи Swagger

В этой статье обсуждается использование gRPC, Rest API, Swagger, Protobuf, и при помощи этого всего создаётся веб-сервер.
Уверен, будет полезно

План статьи:
├╼ Протокол Protobuf
├╼ Фреймворк gRPC
├╼ Плагин gRPC-Gateway
├╼ Описываем proto файлы
├╼ Генерируем код
├╼ Валидация данных
├╼ OpenAPI (Swagger)
├╼ Плагин Buf
╰╼ Запускаем gRPC и REST сервер

📎 Статья

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
👣 Rich Interactive Widgets for Terminal UIs

Библиотека пользовательских интерфейсов для терминала с богатыми интерактивными виджетами, написанная на Go.

go get github.com/rivo/tview@master


Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 GoDS — Go-реализация разных структур данных и алгоритмов

GoDS (Go Data Structures) — это Go библиотека, в которой собраны реализации разных алгоритмов и структур данных, таких как список, множество, стек, дерево, очередь

🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Автоматическая компиляция Go проекта при изменении файлов

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

Чтобы автоматизировать это, можно использовать пакет modd:
go install github.com/cortesi/modd/cmd/modd@latest

(пакет будет скачен в ~/golang/packages/bin, как обычно)

Далее в корне проекта создадим файл modd.conf со следующим содержимым:
# Проверка всех тестов при первой запуске
**/*.go {
prep: go test @dirmods
}

# Автоматическая компиляция проекта при изменении файлов
# Исключает все тестовые файлы *_test.go
**/*.go !**/*_test.go {
prep: go build -o ./bin ./cmd/main.go
daemon +sigterm: ./bin
}

При первом запуске modd пакета будут проверены все имеющиеся тесты. Далее уже идет непосредственно настройки слежения за изменением файлов.
В данном случае мы следим за изменением всех файлов с расширением .go, кроме тестовых. При изменении содержимого какого либо go-файла будет происходить перекомпиляция всего проекта.

Строкой prep: go build -o ./bin ./cmd/main.go мы говорим, чтобы компилировался файл ./cmd/main.go, а результат его компиляции был помещен в каталоге ./bin.

Строкой daemon +sigterm: ./bin мы автоматически запускаем скомпилированный файл, в результате чего отобразится актуальный результат.

Чтобы запустить режим слежения за изменением файлов, достаточно ввести в терминале: modd
Иногда могут возникнуть случаи при которых вы будете ожидать перекомпиляцию, но она не произойдет. Например, при какой-либо серьезной ошибки в программе. Решается очевидным образом: Ctrl + C и по новой запускаем modd.

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🎊 Выпущены версии Go 1.22.3 и 1.21.10!

📣 Анонс: https://groups.google.com/g/golang-announce/c/wkkO4P9stm0

📦 Загрузить: https://go.dev/dl/#go1.22.3

#golang

@Golang_google
👣 Реализация QUIC на чистом Go

quic-go — это Go-реализация протокола QUIC.

QUIC позволяет мультиплексировать несколько потоков данных между двумя компьютерами, работая поверх протокола UDP, и содержит возможности шифрования, эквивалентные TLS и SSL. Имеет более низкую задержку соединения и передачи, чем TCP.

Хорошо переносит потерю части пакетов путём выравнивания границ криптографических блоков по границам пакетов. В протокол заложена возможность прямой (упреждающей) коррекции ошибок на уровне пакетов, но на практике она отключена.

quic-go поддерживает HTTP/3, включая QPACK и HTTP Datagrams.

В дополнение к этим базовым RFC, quic-go также реализует и другие RFC.

🖥 GitHub
🟡 Доки

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
👣 Logdy - terminal logs in web browser

Веб-инструмент для просмотра журналов в режиме реального времени.

Транслируйте любое содержимое в веб-интерфейс с автоматически сгенерированными фильтрами.


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

$ brew install logdy

#backend #golang.

Github: https://github.com/logdyhq/logdy-core
Demo: https://demo.logdy.dev/
Инструмент: https://logdy.dev/

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Grype — сканер уязвимостей на Go для образов контейнеров и файловых систем


brew tap anchore/grype
brew install grype


Работает с Syft, мощным инструментом SBOM (software bill of materials) для контейнерных образов и файловых систем.

GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 О разных подходах к написанию тестов в Go

Обычный подход в написании теста для компонента состоит из следующего:
🟡в компонент внедряются зависимости, но не в виде конкретных типов, а через интерфейсы
🟡на основе интерфейса генерятся моки — в тестах мы вызываем методы тестируемого компонента, засетапив сначала ожидаемые вызовы мока

Такой подход приводит к тому, что в тестах фиксируется внутренняя работа компонента, хотя все, что мы хотим проверить - это, что компонент делает то что нужно, без разницы как он это делает внутри

📎 Что с этим можно сделать?
📎 В тему

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 algernon — автономный сервер на чистом Go

go install github.com/xyproto/algernon@latest

algernon — это веб-сервер со встроенной поддержкой QUIC, HTTP/2, Lua, Teal, Markdown, Pongo2, HyperApp, Amber, Sass(SCSS), GCSS, JSX, Ollama (LLMs), BoltDB (встроенный, хранит БД в файле, как SQLite), Redis, PostgreSQL, MariaDB/MySQL, MSSQL
Помимо этого algernon предоставляет ограничение скорости, плавное отключение, плагины, настройка прав доступа.
Все в одном небольшом исполняемом файле.

🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 mockery — неплохой генератор моков в Go

mockery предоставляет возможность легко генерировать моки для интерфейсов Golang с помощью пакета stretchr/testify/mock
mockery избавляет от шаблонного кодирования, необходимого для использования моков

🖥 GitHub
🟡 Доки

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM