37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
Внимание, Open Source 🚀

Ребята из PaaS-команды СберМаркета решили подарить миру крутой инструмент для интеграционного тестирования сервисов. Он будет полезен для тестировщиков и бэкендеров.

Кодовое название — grpc-wiremock. Это надстройка для мок-сервера Wiremock, позволяющая поддерживать gRPC, MultiAPI, TLS/SSL и роутинг по домену. А ещё отслеживать изменения в контрактах.

Подробнее об инструменте и том, как мы используем его внутри, читайте на Хабре!
👣 Примеры применения шаблона проектирования Фасад на Go.

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

Как вы используете шаблон проектирования фасад в своей работе?

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

hydrapp - это небольшой Go-фреймворк, похожий на Electron с уникальной особенностью: Он может использовать (почти) любой браузерный движок для рендеринга фронтенда.

Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Вакансии направления Go – разрабатывай внутренние и B2B в Kaspersky!
Чем будете заниматься:
Golang developer (Sandbox) – разрабатывать микросервисы на Go, участвовать в создании нового функционала проекта и подготовке релизов новых версий продукта;
Go Developer (MSAP) – участвовать в разработке и поддержка бекенд сервисов под Linux/Kubernetes на Go;
Golang developer – участвовать в разработке микросервисов, работать с имеющимися проектами;
Golang developer (OSMP) – создавать бекенд сервисы под Linux/Kubernetes на Go, развивать микро-сервисный подход, писать тесты, проводить код-ревью.

Основные требования:
● опыт от 2х лет разработки на GO или другом языке (С++, С#, Java);
● опыт разработки микросервисов;
● опыт разработки под Linux;
● понимание принципов ООП.

Откликайтесь, даже если опыт частично отвечает требованиям. Возможно, у вас есть именно нужные нам навыки.
👣 Примеры применения шаблона Наблюдатель на Go.

Наблюдатель (англ. Observer) — поведенческий шаблон проектирования. Также известен как «подчинённые» (англ. Dependents). Реализует у класса механизм, который позволяет объекту этого класса получать оповещения об изменении состояния других объектов и тем самым наблюдать за ними.

Паттерн Наблюдатель определяет зависимость "один-ко-многим" между объектами так, что при изменении состояния одного объекта все зависящие от него объекты уведомляются об этом и обновляются автоматически.

Пример 1: Простое уведомление о событии
Пример 2: Тикер фондового рынка
Пример 3: Погодная станция

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Обход ограничений скорости по IP с помощью ротации IP-адресов при парсинге.

Создание собственного локального прокси с помощью Tor.
Пример в изображении 1.

Использование коммерческого сервиса прокси-пулов SmartProxy.
Пример в изображении 2.

Создание собственного HTTP-клиента с прокси-функцией.
Пример в изображении 3.

После настройки Tor-клиента мы можем проверить IP-адрес запроса. Затем мы вызываем NewIP, чтобы изменить IP-адрес нашего клиента.
Изображение 4.

@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
🧑‍💻 PLOW

Plow инструмент, который пред­назна­чен для наг­рузоч­ного тес­тирова­ния HTTP-сер­веров.

Он осно­ван на Go-биб­лиоте­ке fasthttp, которая до десяти раз быс­трее стан­дар­тной реали­зации, что дела­ет его каким‑то ано­маль­но быс­трым.

Plow может отда­вать ста­тис­тику в реаль­ном вре­мени не толь­ко в окне тер­минала, но и в бра­узе­ре (по стан­дарту встро­енный сер­вер дос­тупен на 18888-м пор­те).

За­пуск воз­можен из Docker или уста­нов­кой из исходни­ков:

go install github.com/six-ddc/plow@latest
plow <args>

Аль­тер­натива:

docker run --rm --net=host ghcr.io/six-ddc/plow <args>

Ар­гумен­ты в целом ничего необыч­ного собой не пред­став­ляют: тут у нас стан­дар­тная для таких прог­рамм нас­трой­ка количес­тва потоков (-c), жела­емо­го количес­тва зап­росов (-n), вре­мени тес­та (-d 30s или -d 5m, нап­ример) и HTTP-метода (--method="GET"). Про дру­гие парамет­ры мож­но под­робно про­читать в справ­ке прог­раммы (--help). Цель переда­ется без спе­циаль­ных парамет­ров.

Github

@Golang_google
Golang бросает панику при закрытии уже закрытого канала. Есть несколько способов, чтобы избежать такого рода паники.

Каждый вариант кода инкапсулирует struct и используется как интерфейс (картинка 1).

1) Panic
В примемер реализован интерфейс Signal:
(картинка 2)

Второй вызов Close() вызывает панику.

2) Простой select является потокобезопасным вариантом.
(картинка 3)

3) Панику можно перехватить с помощью функции recover() в defer
(картинка 4).

4) sync.Once - еще один способ перехвата. Он вызывает close() только один раз и это элегантный способ обработки закрытия нескольких каналов (картинка 5).

5)В Golang 1.21 появилась функция sync.OnceFunc, которая лучше подходит для этого случая использования (картинка 6).

Можно также использовать sync.Mutex, но он не является оптимальным, как sync.Once, поскольку всегда использует блокировку и разблокировку.

6) context.WithCancel - это еще один вариант, чтобы избежать панику (картинка 7).

Напишите свой вариант кода в комментариях👇

@Golang_google