37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
👣 Паттерны проектирования с примерами на Go

Полезный контент 🔥
Это коллекция из 22 популярных паттернов проектирования с примерами кода на языке Go и кратким описанием паттерна.

В кратких описаниях будут употребляться классические термины, такие как Класс, Объект, Абстрактный Класс. Применимо к языку Go, это Тип, Значение этого типа и Интерфейс (где это возможно).

Умение правильно использовать шаблоны проектирования, так сказать, в нужном месте и в нужное время, помогут сохранить ваши нервные клетки, используйте эти ссылки

📎 Ссылки на паттерны

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

🔐 Безопасность: исправлена ошибка CVE-2023-45288

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

📦 Скачать: https://go.dev/dl/#go1.22.2

@Golang_google
🔥 Hypert - это библиотека Go с открытым исходным кодом, которая упрощает тестирование клиентов HTTP API.

Она предоставляет удобный способ создания и воспроизведения HTTP запросов, и значительно упрощает создание надежных тестов для ваших клиентов API.

Запись и воспроизведение тестов
Автоматическое удаления конфиденциальной информации
Проверка запросов для обеспечения их целостности
Полная интеграция с GO протоколом http.Client
Легко расширяемые и настраиваемые опции

go get github.com/areknoster/hypert

Github

@Golang_google
Go отлично подходит для работы с большими языковыми моделями и генеративным ИИ.

В этом выпуске "On the Go" показано, как использовать Go для работы с генеративным ИИ с помощью Gemini Pro.

Видео
Nvidia бесплатные обучающие курсы по генеративному ИИ

@Golang_google
👣 go-cfg - Go Configuration Library

Простой и удобный способ инициализировать конфигурацию в структуры, с помощью структурных тегов.

Поддерживаемые форматы:
Переменные окружения
Флаги
Файлы в формате yaml, toml, json, env

Создается структура с тэгами, затем указывается источник конфигурации и ссылка на переменную структуры. Источников может быть несколько, значения будут перекрываться в порядке инициализации.

▪️Github
▪️Docs

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Полностью локально работающий поисковый агрегатор с использованием агентов LLM.

Никаких ключей OpenAI или Google API не требуется.

Серверная часть написана на golang.

Github

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

Почитать:
Dataloader 3.0: Новый алгоритм для решения проблемы N+1
Выпущены версии 1.22.2 и 1.21.9!
DevOps лучшие бесплатные курсы, книги и ресурсы
Golang: Мои Открытия
Data Flow Analysis для Go 
Миграция баз данных на GO
Beego в Golang для начинающих
Создание серверного Live Chat приложения с использованием Next.js, Fauna и WunderGraph для GraphQL Live Queries
Разбираемся в новом роутинге в Go 1.22
Интервью Роберта Пайка про Go
Огромный список лучших бесплатных курсов Data Science.
Масштабирование подписок GraphQL в Go с использованием Epoll и архитектуры, основанной на событиях
👋 Go "Hello world!" guide
Application Of The Multiple Return Function
Implementing OTel Trace Context Propagation Through Message Brokers with Go
Golang >>> Rust 🔥[Prediction]
Zero cost debug assertions in Go
Real-Time Example: Using Goroutines and Channels
Over 6K Lines Of Code In March, What's The Takeaway?
Simple constant time weighted random choice algorithm
Portr: open-source self-hosted tunnel designed for teams

Проекты

Beego — новая версия высокопроизводительного Go фреймворка для разработки RESTful API, веб-приложений и бэкенд-сервисов, вдохновленный Tornado, Sinatra и Flask.
Паттерны проектирования с примерами на Go
Freeze — полезный Go инструмент для генерации изображений кода и вывода терминала.
Skopeo - это утилита командной строки, которая выполняет различные операции с образами контейнеров и их хранилищами.

Посмотреть:
🌐 Why Golang HTTP Handlers Should Return An Error ( 11:43)
🌐 Golang HTTP Error Handlers & Freestyle Coding To Get Better ( 02:09:24)
🌐 Solving A Golang Job Interview Assignment With Kafka ( 02:24:10)
🌐 1 BILLION ROWS CHALLENGE IN GOLANG ( 02:18:57)
🌐 Пишем рантайм Golang на чистом C | Планировщик Go ( 16:44)

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

@Golang_google
👣 Как разработать gRCP-сервис на Go

Статья о том, как написать полноценный gRPC-сервис с архитектурой на Go. На примере сервера авторизации.
Попутно идёт знакомство с базовыми подходами к работе с авторизацией, а в конце — настройка автоматического деплоя на сервер с помощью GitHub Actions.

Содержание
• Как правильнее: SSO или Auth?
• Архитектура
• Описание контракта и генерация кода
• Точка входа и конфигурация

📎 Статья

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 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