В компании $WORK мы столкнулись с необходимостью "плавного завершения работы" наших сервисов. Грациозное завершение работы позволяет убедиться в том, что система правильно финиширует перед завершением. В качестве аналогии можно привести ситуацию, когда человек пытается правильно завершить телефонный разговор перед тем, как перейти к следующей встрече, а не просто бросает трубку на середине фразы.В этой главе мы расскажем о том, что такое плавное завершение работы в контексте HTTP-серве…
В этой главе мы погрузимся в мир тестовых двойников и рассмотрим, как они влияют на процесс тестирования и разработки. Мы раскроем ограничения традиционных mocks (имитаторы), stubs (заглушки) и spies (шпионы) и представим более эффективный и адаптируемый подход с использованием подделок (fakes) и контрактов (contracts).tl;drMocks, spies и stubs побуждают вас кодировать предположения о поведении зависимостей ad-hoc в каждом тесте.Эти предположения, как правило, не проверяются вручную, что стави…
При рефакторинге легаси проекта перед нами встала задача внедрить в компании готовый линтер-тулз, дабы минимизировать объёмы генерируемого говнокода.Вот что у нас получилось (полная инструкция по внедрению).1. Сам ямл, со всем конфигомЯмл закидывается в корень проекта под названием .golangci.ymllinters-settings: varnamelen: min-name-length: 2 max-distance: 20 nlreturn: # Size of the block (including return statement that is still "OK") # so no return split required.…
Вернувшись в очередной раз к Golang-программированию в свободное от жизни время, решил потратить его с пользой и написать серию статей по паттернам программирования на примере этого языка. Вдохновила меня на это другая работа - Шпаргалка по шаблонам проектирования. Всем советую ее, пользуюсь много лет - человек реально собрал все в одном месте - для тех кому нужно только вспомнить концепт. Надеюсь автор не обидится за то, что позаимствую картинки для общего блага.Сразу попрошу всех, кто найдет…
В Go 1.20 сделали возможность сбилдить приложение с флагом cover go build -cover после чего, если запустить такое приложение, то будет собираться статистика, показывающая, какие части кода были выполнены, а какие нет, и складываться в папочку, указанную в переменной окружения. Это, конечно, было сделано для интеграционных тестов, когда приложение запускается целиком в каких-то сценариях (а не через go test), но, вероятно, это можно попробовать использовать и по-другому: запустить такой бинарни…
А вы часто читаете реализацию стандартной библиотеки своего любимого языка?Меня зовут Константин Соколов, и мы с Сергеем Мачульскисом, моим коллегой из бэкенд-разработки в Positive Technologies хотим с вами поделиться вдохновением. Давайте вместе посмотрим на пакет context с последними обновлениями. На наш взгляд, он идеально выражает философию языка Go! Образцовый интерфейс, постоянное развитие пакета и использование самых распространенных приемов Go — все это говорит о том, что наш материал …
Занимаясь написанием статьи о Data Vault по разведению кроликов, возникла потребность сгенерировать много данных для ClickHouse. Все генераторы, что смотрел - так и не придумал как сделать 50ГБ данных быстро и эффективно с их помощью. Поэтому решил развлечься и субботний день провести со старым другом. Сразу скажу - я не занимаюсь разработкой на Golang. Это скорее хобби. Так что прошу не судить строго.Итак, задача:сгенерировать данные для Data Vault от точки N до текущего днясделать это в форм…
В этой статье мы рассмотрим пример простого HTTP-сервера, написанного на языке программирования Golang, который предоставляет информацию о контейнерах Docker.Ссылка на Githubhttps://github.com/sardor-wd/go-dockerИмпортыМы начинаем с импорта нескольких пакетов которые нам понадобятся, чтобы работать с Docker и HTTP. Это подобно тому, как вы берете инструменты для ремонта, прежде чем начать работу.package main import ( "context" "encoding/json" "fmt" "github.com/…
В данной статье представлен простой способ реализации микросервисной архитектуры с использованием Kafka, Golang и Docker.Если вы сразу хотите перейти к рабочему коду, вот ссылка на репозиторийОбщий процесс работыКлиент отправляет HTTP-запрос на первый микросервис (API Gateway), используя, например, Postman.API Gateway передает запрос в Kafka, откуда его принимает второй микросервис.Второй микросервис обрабатывает запрос и отправляет ответ обратно в Kafka.API Gateway извлекает ответ из Kafka и …