37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
👣 Go в тулинг! Какие внутренние инструменты мы пишем на Go

Ребята из Lamoda рассказывают, какие инструменты на Go они для себя запилили.

Вот некоторые:
Gonkey — библиотека для проектов на Golang и консольная утилита (для проектов на любых языках и технологиях), с помощью которой можно проводить функциональное и регрессионное тестирование сервисов путем обращения к их API по заранее составленному сценарию. Сценарии тестов описываются в YAML-файлах.

Molekula — инструмент генерации кода для десериализации Aerospike.
Aerospike — это распределённая schema-less key-value база данных, которая работает по принципу хэш-таблицы. Основная её особенность — отсутствие схемы данных. По одному ключу в ней может храниться что угодно, в том числе мапы и списки произвольной вложенности. В итоге в коде много строк и ошибок.

Scratch — инструмент, который позволяет генерировать код для новых сервисов.

📎 Статья
📎Gonkey

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Как я пишу HTTP-сервисы спустя 13 лет работы с Go

Держите отличную статью
Внутри такие очевидные и не очень вещи:

В статье предлагается использовать промежуточное ПО для разделения кода на слои и упрощения тестирования.

Важно оптимизировать чтение кода и избегать излишней косвенности.

Типы запросов и ответов могут быть определены внутри обработчиков для поддержания чистоты глобального пространства.

Использование вложенных типов запросов/ответов позволяет раскрывать дополнительную информацию для будущих поколений.

Функция run используется для запуска программы прямо из тестового кода, обеспечивая удобство тестирования.

Сквозное тестирование противопоставляется юнит-тестированию всех внутренних частей.

📎 Статья

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

Туннельное решение, позволяющее подключать локальные HTTP и TCP-соединения к общедоступному Интернету.

Port в первую очередь предназначен для небольших команд разработчиков, которые хотят предоставить доступ к серверам своего проекта по общедоступному URL-адресу.

#golang

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Годный самоучитель по CI/CD и Kubernetes для Go-разработчиков

Что внутри этого бесплатного гайда:
Подготовка окружения и сборка образа
Основы Kubernetes
Создание приложения на Go, работа с файлами и БД
Лучшие практики деплоя
Построение CI/CD-пайплайна
GitLab CI/CD, GitHub Actions, ArgoCD

📎 Гайд

@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
👣 Конкурентность и параллелизм в Go

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

Для этого держите годную статью в тему, а вот некоторые факты из неё:
Гонки могут привести к непредсказуемому поведению программы и ошибкам.

Для обнаружения гонок в программе используется race detector.

RWMutex может быть оптимизацией для приложений с высокой частотой операций чтения и записи.

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

sync.Map является обёрткой над map[any]any, готовой к конкурентному доступу.

📎 Статья

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 GoLand и его фишки

Для тех, кто ещё не пробовал использовать GoLand для работы с Go — попробуйте, вам понравится)

Вот некоторые фишки:

Умное автодополнение. Автодополнение в GoLand помогает писать код быстрее. Сочетание клавиш Ctrl+Shift+Space вызывает список вариантов автодополнения, наиболее подходящих для данного контекста.

Инспекции и быстрые исправления. Обнаружив проблему, IDE тут же предложит ее исправить. Чтобы применить автоматическое исправление, просто нажмите Alt+Enter.

Генерация кода. В некоторых случаях GoLand может cгенерировать для вас тривиальный код. Например, если вы нажмете Ctrl+O, IDE поможет вам реализовать любой интерфейс, сгенерировав его методы.

Обнаружение рекурсивных вызовов. Если внутри вашей функции есть рекурсивный вызов, GoLand обнаружит его и поставит метку на поле редактора — это упростит чтение и понимание кода.

Действие Type Parameter. Действие Type Parameter (Alt+) всегда под рукой, если необходимо узнать тип выражения, на котором находится курсор.

Подсветка точек выхода. Каждая функция может иметь больше одного оператора return или panic. Чтобы быстро найти их все, нажмите 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
👣 Некоторые возможности ssh в Go

Создать ssh-сервер на Go можно при помощи модуля golang.org/x/crypto/ssh.
А при помощи пакета github.com/gliderlabs/ssh можно разработать ssh-сервер легко и быстро. Ssh подразумевает не только доступ к оболочке (shell), но и прочие возможности: файловый сервер (sftp), проброс портов.

Репозиторий проекта содержит минимальный пример, выводящий строку «Hello world» любому подключенному ssh-клиенту:

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
👣 reverst: HTTP reverse tunnels over QUIC

Обратный туннель (с балансировщиком нагрузки) и клиентская библиотека Go-сервера, построенная на основе QUICK и HTTP/3
#golang

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Отличная подборка материалов по Go: книги, шпаргалки, туториалы

Здесь вы наверняка найдёте что-то полезное для себя, покрываются практически все темы 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

Go Migrate — это инструмент для управления миграциями базы данных, написанный на языке Go. Он может использоваться как интерфейс командной строки (CLI), так и импортироваться в качестве библиотеки для проектов Go.
Go Migrate может считывать файлы миграции из различных источников и применять их к базе данных в правильном порядке. Он поддерживает различные драйверы баз данных и источники миграции.

Go Migrate поддерживает множество драйверов базы данных, включая:
PostgreSQL • Cassandra • SQLite • MariaDB • MongoDB • ClickHouse

Чтобы использовать Go Migrate в вашем проекте Go, вам нужно импортировать необходимые пакеты и библиотеки. Вот пример:
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.

📎 Подробнее
📎 GitHub 13.8k ⭐️

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира Golang за неделю

Инструменты недели:

xgo — библиотека, которая позволяет добавить функцию Trap и предоставляет такие инструменты, как Mock и Trace. xgo помогает разработчикам писать юнит-тесты и отлаживать их проще и быстрее.
portr - туннельное решение, позволяющее подключать локальные HTTP и TCP-соединения к общедоступному Интернету.
reverst - обратный туннель (с балансировщиком нагрузки) и клиентская библиотека Go-сервера, построенная на основе QUICK и HTTP/3
#golang
gorabbit - оболочка на GO, обеспечивающая высокоуровневую и надежную работу RabbitMQ с помощью клиента или менеджера.
househunt — полноценное веб-приложение на Go, которое научит вас создавать правильную структуру проекта.

Почитать:
Аутентификация go с использованием токенов PASETO
Годный самоучитель по CI/CD и Kubernetes для Go-разработчиков
Нативные подписки с роутером Cosmo
Odinbit, игра моей мечты и процесс её создания. С нуля до первой публичной версии
GoLand и его фишки
Конкурентность и параллелизм в Go
Go повышение производительности в версиях с 1.0 по 1.22
Введение в Router Cosmo — потрясающе быстрый шлюз с открытым исходным кодом Federation V1/V2
Пространство имен для GraphQL: Бесконфликтное объединение любого количества API
Building "Journal Buddy": A Custom GPT for Personal Reflection
Progress in My P2P Library: A Work in Progress
What Happens After Agile Dies?
Why should you try GoCfg or yet another Go config manager
Exploiting HTTP/2 CONTINUATION frames for DoS attacks
Gorabbit: RabbitMQ supercharged for Go Applications
Build a CLI tool : Generating hex dumps with Golang

Посмотреть:
🌐Создание Redis с нуля на Golang ( 02:49:24)
🌐 Mastering And Taming NIL Pointers in Golang For Beginners ( 13:24)
🌐 How To Build A Complete Distributed File Storage In Golang ( 09:57:01)
🌐 If U Use GitHub CO-PILOT I Wont Hire You!? ( 11:21)
🌐 Programming Career Paths, Roadmaps, LeetCode, And Salaries ( 02:28:42)
🌐 Building Redis In Golang And NeoVim Setup With ThePrimeagen ( 03:28:48)
🌐 Building Redis From Scratch In Golang - Learn Go Like A PRO ( 02:49:29)
🌐 Developers Do NOT Understand the POWER Of HTMX ( 10:31)

Хорошего дня!

@Golang_google