В этой статье обсуждается использование 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
Библиотека пользовательских интерфейсов для терминала с богатыми интерактивными виджетами, написанная на Go.
go get github.com/rivo/tview@master
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
GoDS (Go Data Structures) — это Go библиотека, в которой собраны реализации разных алгоритмов и структур данных, таких как список, множество, стек, дерево, очередь
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
modd
: go install github.com/cortesi/modd/cmd/modd@latest
(пакет будет скачен в
~/golang/packages/bin
, как обычно)# Проверка всех тестов при первой запуске
**/*.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
📣 Анонс: https://groups.google.com/g/golang-announce/c/wkkO4P9stm0
📦 Загрузить: https://go.dev/dl/#go1.22.3
#golang
@Golang_google
quic-go — это Go-реализация протокола QUIC.
QUIC позволяет мультиплексировать несколько потоков данных между двумя компьютерами, работая поверх протокола UDP, и содержит возможности шифрования, эквивалентные TLS и SSL. Имеет более низкую задержку соединения и передачи, чем TCP.
Хорошо переносит потерю части пакетов путём выравнивания границ криптографических блоков по границам пакетов. В протокол заложена возможность прямой (упреждающей) коррекции ошибок на уровне пакетов, но на практике она отключена.
quic-go поддерживает HTTP/3, включая QPACK и HTTP Datagrams.
В дополнение к этим базовым RFC, quic-go также реализует и другие RFC.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Веб-инструмент для просмотра журналов в режиме реального времени.
Транслируйте любое содержимое в веб-интерфейс с автоматически сгенерированными фильтрами.
Вы можете взять бинарник 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
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
Обычный подход в написании теста для компонента состоит из следующего:
Такой подход приводит к тому, что в тестах фиксируется внутренняя работа компонента, хотя все, что мы хотим проверить - это, что компонент делает то что нужно, без разницы как он это делает внутри
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
—
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 предоставляет ограничение скорости, плавное отключение, плагины, настройка прав доступа.
Все в одном небольшом исполняемом файле.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
mockery предоставляет возможность легко генерировать моки для интерфейсов Golang с помощью пакета
stretchr/testify/mock
mockery избавляет от шаблонного кодирования, необходимого для использования моков
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
mkdir ~/golang
cd ~/golang
Далее переходим на страницу официального сайта https://go.dev/dl/, с перечнем доступных версий Golang и скачиваем нужный нам архив.
Распаковываем скаченный архив в созданный каталог, у меня это
~/golang
и переименовываем его так, чтобы было понятно какая это версия, например go-1.21.4. Должно получиться ~/golang/go1.21.4
.Предположим, что вышла новая версия Golang 1.21.5. Так же скачиваем архив, с данной версией на официальном сайте и распаковываем ее в созданный каталог
~/golang/go1.21.5
. И того должна получиться следующая структура:
├── go-1.21.4
├── go-1.21.5
Аналогичным образом в дальнейшем добавляем другие версии.
Сейчас если вести в терминале команду:
go version
Мы получим ошибку
go: команда не найдена
. Чтобы это исправить откроем в привычном вам редакторе файл ~/.profile
и добавим в него следующую конструкцию:
# golang
export GOROOT=~/golang/go1.21.5
export PATH=$PATH:$GOROOT/bin
Далее мы расширяем переменную сред
PATH
добавив к ее значениям $GOROOT/bin
, ссылающуюся на исполняемый файл Golang.Перезапустим терминал либо введем команду, чтобы изменения вступили в силу:
source ~/.profile
Теперь если ввести в терминале команду:
go version
Вместо ошибки увидим текущую версию —
go version go1.21.5 linux/amd64
.
go get <package>
go install <package>
Необходимо явно указать каталог куда пакеты будут скачены. Создадим каталог ~/golang/packages рядом с версиями Golang.
mkdir ~/golang/packages
Остается добавить, созданный каталог в переменные среды по аналогии как это было сделано с GOROOT и того должно получиться:
# golang
export GOROOT=~/golang/go1.21.5
export GOPATH=~/golang/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Перезапустим терминал либо введем команду, чтобы изменения вступили в силу:
source ~/.profile
@Golang_google
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