Попутно идёт знакомство с базовыми подходами к работе с авторизацией, а в конце — настройка автоматического деплоя на сервер с помощью GitHub Actions.
Содержание
• Как правильнее: SSO или Auth?
• Архитектура
• Описание контракта и генерация кода
• Точка входа и конфигурация
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Ребята из Lamoda рассказывают, какие инструменты на Go они для себя запилили.
Вот некоторые:
Aerospike — это распределённая schema-less key-value база данных, которая работает по принципу хэш-таблицы. Основная её особенность — отсутствие схемы данных. По одному ключу в ней может храниться что угодно, в том числе мапы и списки произвольной вложенности. В итоге в коде много строк и ошибок.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Держите отличную статью
Внутри такие очевидные и не очень вещи:
run
используется для запуска программы прямо из тестового кода, обеспечивая удобство тестирования.@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Туннельное решение, позволяющее подключать локальные HTTP и TCP-соединения к общедоступному Интернету.
Port в первую очередь предназначен для небольших команд разработчиков, которые хотят предоставить доступ к серверам своего проекта по общедоступному URL-адресу.
#golang
▪Github
@Golang_google
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
👣 GigaAM: класс открытых моделей для обработки звучащей речи
Команда SberDevices показала свое семейство моделей для обработки речи, обученных на русском языке.
⏩GigaAM умеет быстро адаптироваться к разным задачам, от распознавания речи до взаимодействия с различными доменами (колл-центр, подкасты, farfield).
⏩GigaAM-CTC допускает на 20–37% меньше ошибок в словах на коротких русскоязычных запросах по сравнению с такими популярными решениями, как NeMo-Conformer-RNNT и Whisper-Large-v3.
⏩GigaAM-Emo умеет устанавливать связь с рядом паттернов, которые отвечают за эмоциональное состояние говорящего.
📎 Статья
📎 github
@Golang_google
Команда SberDevices показала свое семейство моделей для обработки речи, обученных на русском языке.
⏩GigaAM умеет быстро адаптироваться к разным задачам, от распознавания речи до взаимодействия с различными доменами (колл-центр, подкасты, farfield).
⏩GigaAM-CTC допускает на 20–37% меньше ошибок в словах на коротких русскоязычных запросах по сравнению с такими популярными решениями, как NeMo-Conformer-RNNT и Whisper-Large-v3.
⏩GigaAM-Emo умеет устанавливать связь с рядом паттернов, которые отвечают за эмоциональное состояние говорящего.
📎 Статья
📎 github
@Golang_google
Go — это язык, который проектировался в первую очередь для конкурентных и параллельных вычислений.
Поэтому, если Go — ваш рабочий инструмент, неплохо бы в этом разбираться.
Для этого держите годную статью в тему, а вот некоторые факты из неё:
race detector
.RWMutex
может быть оптимизацией для приложений с высокой частотой операций чтения и записи.sync.Map
является обёрткой над map[any]any
, готовой к конкурентному доступу.@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Для тех, кто ещё не пробовал использовать GoLand для работы с Go — попробуйте, вам понравится)
Вот некоторые фишки:
Ctrl
+Shift
+Space
вызывает список вариантов автодополнения, наиболее подходящих для данного контекста.Alt
+Enter
.Ctrl
+O
, IDE поможет вам реализовать любой интерфейс, сгенерировав его методы.Alt+
) всегда под рукой, если необходимо узнать тип выражения, на котором находится курсор.Ctrl
+Shift
+F7
, установив курсор на ключевом слове func, return или panic. Это поможет быстрее понять, как работает функция.Вот такие классные возможности, так что пользуйтесь GoLand)
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
golang.org/x/crypto/ssh.
А при помощи пакета
github.com/gliderlabs/ssh
можно разработать ssh-сервер легко и быстро. Ssh подразумевает не только доступ к оболочке (shell), но и прочие возможности: файловый сервер (sftp), проброс портов.
package main
import (
"github.com/gliderlabs/ssh"
"io"
"log"
)
func main() {
ssh.Handle(func(s ssh.Session) {
io.WriteString(s, "Hello world\n")
})
log.Fatal(ssh.ListenAndServe(":2222", nil))
}
golang.org/x/term.
Упрощенно обработчик будет выглядеть вот так:
import (
...
terminal "golang.org/x/term"
)
func sessionHandler(s gssh.Session) {
defer s.Close()
if s.RawCommand() != "" {
io.WriteString(s, "raw commands are not supported")
return
}
// создаем терминал
term := terminal.NewTerminal(s,
fmt.Sprintf("/%s/ > ", s.User()))
// добавляем обработку pty-request
pty, winCh, isPty := s.Pty()
if isPty {
_ = pty
go func() {
// реагируем на изменение размеров терминала
for chInfo := range winCh {
_ = term.SetSize(chInfo.Width, chInfo.Height)
}
}()
}
for {
// считываем ввод пользователя
line, err := term.ReadLine()
if err == io.EOF {
_, _ = io.WriteString(s, "EOF.\n")
break
}
// обработаем результат
result = processInput(line)
// выведем в терминал
io.WriteString(term, result)
}
}
▪GitHub
▪Подробнее
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🐇 Gorabbit
Оболочка на GO, обеспечивающая высокоуровневую и надежную работу RabbitMQ с помощью клиента или менеджера.
RabbitMQ — программный брокер сообщений на основе стандарта AMQP — тиражируемое связующее программное обеспечение, ориентированное на обработку сообщений.
• Github
@Golang_google
Оболочка на GO, обеспечивающая высокоуровневую и надежную работу RabbitMQ с помощью клиента или менеджера.
RabbitMQ — программный брокер сообщений на основе стандарта AMQP — тиражируемое связующее программное обеспечение, ориентированное на обработку сообщений.
• Github
@Golang_google
Обратный туннель (с балансировщиком нагрузки) и клиентская библиотека Go-сервера, построенная на основе QUICK и HTTP/3
#golang
▪ Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Здесь вы наверняка найдёте что-то полезное для себя, покрываются практически все темы Go
— Синтаксис и структура программ • Переменные, типы данных, операторы • Управляющие структуры (циклы, условные операторы) • Функции и пакеты.
— Массивы и срезы • Строки и форматирование • Карты • Структуры.
— Обработка ошибок в Go • Пакет
errors
и создание пользовательских ошибок.— Горутины и каналы •
sync
пакет для синхронизации доступа к данным • context
пакет для управления жизненным циклом горутин.— Создание HTTP серверов и клиентов • Работа с TCP и UDP • Использование
net
и net/http
пакетов.— Чтение и запись файлов • Операции с директориями • Использование пакета
os
и io
.— Работа с SQL и NoSQL базами данных • Использование пакетов
database/sql
и go-sql-driver
• Интеграция с ORM, например, GORM.— Написание и запуск тестов • Использование пакета
testing
• Тестирование с помощью моков и заглушек.@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Go Migrate может считывать файлы миграции из различных источников и применять их к базе данных в правильном порядке. Он поддерживает различные драйверы баз данных и источники миграции.
PostgreSQL • Cassandra • SQLite • MariaDB • MongoDB • ClickHouse
import (
"github.com/golang-migrate/migrate/v4"
_ "github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/github"
)
func main() {
m, err := migrate.New(
"github://mattes:personal-access-token@mattes/migrate_test",
"postgres://localhost:5432/database?sslmode=enable")
m.Steps(2)
}
Этот код инициализирует Go Migrate с указанным источником и базой данных, затем применяет 2 миграции, используя метод
Steps
.@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
https://benhoyt.com/writings/go-version-performance-2024/
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Benhoyt
Go performance from version 1.0 to 1.22
Shows how much the performance of Go has improved from version 1.0 through to 1.22 (including PGO) -- in its compiler, runtime, and libraries.