Please open Telegram to view this post
VIEW IN TELEGRAM
Go4Fun - Functional programming and more
Go for Functional Programming?
Go is a powerful, fast, safe and simple language with some interesting distinctive features. And while Go is a multi-paradigm language, it was not designed to promote a functional-first programming model: the imperative style programming is by far th...
Симпатичный пакет печати Go (альтернатива fmt), минималистичный, без зависимостей!
go get -u github.com/zakaria-chahboun/cute@latest
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Fman быстрый файловый менеджер для терминала, написанный на GO
Имеет чистый интерфейс с подсветкой синтаксиса и поддержкой различных тем
$ go install github.com/nore-dev/fman@latest
#Interesting #Go #Terminal
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Ddosify - очень простой в использовании инструмент для нагрузочного тестирования веб ресурсов.
Поддерживает HTTP, HTTPS, HTTP/2 протоколы.
#go #golang #hack #pentest
@github_code
Please open Telegram to view this post
VIEW IN TELEGRAM
В эпоху мобильного Интернета масштабы бизнес-систем, которые непосредственно сталкиваются с C-пользователем, как правило, очень велики, и машинные ресурсы, потребляемые системой, также весьма значительны. Количество ядер ЦП и памяти, используемых системой, поглощают реальные деньги компании. Сведение к минимуму потребления ресурсов одним экземпляром службы без снижения уровня обслуживания, что обычно известно как «есть меньше травы и производить больше молока», всегда было целью операторов каждой компании, и некоторые компании могут сэкономить сотни тысяч долларов в год за счет сокращения количества используемых ядер процессора на 1%.
При одинаковом выборе языка программирования важно постоянно снижать потребление сервисных ресурсов. Более естественно и просто полагаться, с одной стороны, на разработчиков, которые будут постоянно совершенствовать производительность своего кода, а с другой — на компиляторов языка программирования, чтобы улучшить результаты с точки зрения оптимизации компиляции. Однако эти два аспекта также дополняют друг друга: если разработчики смогут более тщательно понять сценарии и инструменты оптимизации компилятора, они смогут написать более дружественный код для оптимизации компиляции и, таким образом, получить лучшие результаты оптимизации производительности.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
В этой статье мы рассмотрим создание API со следующим шагом реализации обратного прокси.
Мы будем использовать docker и docker-compose, поэтому я рекомендую сначала установить docker и docker-compose и убедиться, что вы можете запускать контейнеры.
➡️ Читать дальше
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Покрытие кода предполагает проведение множества тестов, а это часто может быть опасно. Инструмент преодолевает это ограничение, исполняя код в изолированной среде — внутри контейнера Docker. Для этого необходимо лишь ввести адрес репозитория и нажать на кнопку. На экране отобразится процент покрытия кода, а покрытые и непокрытые области выделятся разным цветом.
Стоимость: #бесплатно.
#devOps #Golang
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Варианты использования:
✅ Установка на собственный сервер с возможностью работать над проектами вместе.
✅ Установка на компьютер как обычное приложение.
Поддерживает Linux, Mac и Windows.
#typescript #go
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Может запускать миграции в виде файлов SQL на диске или встроенных в функции Go. Это означает, что вы можете отправить автономный двоичный файл для выполнения миграций без каких-либо зависимостей. Поддерживает неупорядоченные миграции. Имеется поддержка БД: Redshift, MySQL, Postgres, Clickhouse и другие.
Стоимость: #бесплатно.
$ go install github.com/pressly/goose/v3/cmd/goose@latest
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Свежая подборка новостей и материалов
Новости, события
- Выпущены Go 1.19.3 и Go 1.18.8 — включают исправление безопасности
syscall, os/exec: не дезинфицированный NUL в переменных окружения
В Windows syscall.StartProcess и os/exec.Cmd неправильно проверяли недопустимые значения переменных среды. Вредоносное значение переменной среды может использовать это поведение для установки значения для другой переменной среды. Например, строка переменной среды «A=B\x00C=D» устанавливает переменные «A=B» и «C=D»
Дополнительные сведения
- Выпущены Go 1.19.2 и Go 1.18.7 — что нового:
-archive/tar: неограниченное потребление памяти при чтении заголовков
- net/http/httputil: ReverseProxy не должен пересылать неразборчивые параметры запроса
- regexp/syntax: ограничение памяти, используемой при разборе регулярных выражений
дополнительные сведения
- Twilio выпускает официальную библиотеку «Go Helper»
- Autostrada: генератор кодовой базы для проектов Go - сайт, который позволяет вам выбирать из множества вариантов (веб-приложение или JSON API, SQLite или Postgres — добавить аутентификацию, безопасные файлы cookie, сеансы и т. д.), а затем загружать пользовательскую кодовую базу, созданную из этих параметры для продолжения создания приложения.
- В Go появился экспериментальный пакет «арена» . Арена памяти, как было предложено в феврале, обеспечивает альтернативный способ выделения памяти, который может уменьшить накладные расходы на управление памятью.
- JetBrains выпустила предварительную версию IDE Fleet
➡️ Читать дальше
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Эта статья посвящена ремонтопригодности кода модульного тестирования, не знаю, писали ли вы когда-нибудь модульный тест в spaghetti-style, который структурирован похожим образом. Честно говоря, я написал довольно много.
func TestFoo(t *testing.T) {
// test get
resp, err := GET(blabalbal)
assert.Nil(err)
...
// test post
resp, err = POST(blabalbal)
assert.Nil(err)
...
// test update
resp, err = PUT(blabalbal)
assert.Nil(err)
...
}
Большинство людей это пишут для удобства: для инициализации переменных и их повторного использования. Но когда код варианта использования слишком длинный, а единственный текст завершается неудачей, трудно найти конкретную причину, а ее поиск занимает много времени при отладке.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Большинство современных программных систем имеют микросервисную архитектуру. Для стека микросервисных технологий Spring Cloud характерно содержание в прикладной системе нескольких прикладных микросервисов.
Перед запуском приложения необходимо запустить шлюз, центр регистрации, центр конфигурации, базу данных (даже при наличии внедренного в систему межплатформенного ПО, такого как Redis, RabbitMQ, системы управления логами ELK, системы визуализации Grafana и других сервисов).
При развертывании приложения с микросервисной архитектурой необходимо упаковать разработанный сервис Spring Boot в образ Docker, импортировать его в Docker, а затем запустить развертывание.
Межплатформенное ПО, база данных и другие сервисы также должны получить соответствующую версию образа из удаленного хранилища Docker для развертывания. Это довольно громоздкий процесс, занимающий много времени.
Уменьшить рабочую нагрузку позволяет использование Docker Compose — официального инструмента оркестрации контейнеров, предоставляемого компанией Docker.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Сам проект кроссплатформенный, а также имеет открытое API для создания плагинов
#Go #Terminal
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Наиболее распространенным способом обработки ошибок в gRPC является прямой возврат ошибки, например, return nil, err, но на практике также у нас есть коды бизнес-статуса для возврата, и распространенным способом является определение кода ошибки в возвращаемой структуре, но очень громоздко для записи, например, вам придется написать это так.
user, err := dao.GetUserByEmail(ctx, email)
if err != nil {
if err == gorm.RecordNotFound {
return &GetUserResp{Code: USER_NOT_FOUND, Msg: "user not found"}, nil
}
return nil, err
}
Здесь присутствует несколько проблем:
- возвращающие ошибки - это боль при написании, потому что вам нужно каждый раз определять ошибку, а затем преобразовывать ее в соответствующий код ошибки в полях Code, Msg.
- если вы вернете err напрямую, вместо самоопределяемых grpc codes.NotFound, ошибка не может быть распознана в клиенте.
- если вы используете шлюз, любая ошибка, которая не является пользовательской ошибкой grpc, будет указана как 500.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Golang вопросы собеседований
#практика
Необходимо реализовать сервис, позволяющий следить за изменением цены любого объявления на Авито (другой аналогичный сайт с объявлениями):
1. Сервис должен предоставить HTTP метод для подписки на изменение цены. На вход метод получает - ссылку на объявление, email на который присылать уведомления.
2.После успешной подписки, сервис должен следить за ценой объявления и присылать уведомления на указанный email.
3. Если несколько пользователей подписались на одно и тоже объявление, сервис не должен лишний раз проверять цену объявления.
Требования к решению
- Необходимо проработать архитектуру сервиса и описать принципиальную схему работы в виде текста и/или диаграмм.
- Приложить фрагменты кода, решающие конкретные задачи:
- Подписка на изменение цены
- Отслеживание изменений цены
- Отправка уведомления на почту
Работа с БД
- Язык программирования Golang.
Чтобы получить цену объявления, можно:
- парсить web-страницу объявления
- самостоятельно проанализировать трафик на мобильных приложениях или мобильном сайте и выяснить какой там API для получения информации об объявлении
Усложнения
- Реализовать полноценный сервис, который решает поставленную задачу (сервис должен запускаться в docker-контейнере).
- Написаны тесты (постарайтесь достичь покрытия в 70% и больше).
- Подтверждение email пользователя.
Ставьте ❤️, если вам интересно увидеть практические задания с реальных собеседований.
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Тестовое задание для кандидата на должность Golang разработчика.
Описание
Есть внешний сервис, который обрабатывает некие абстрактные объекты батчами. Данный сервис может обрабатывать только определенное количество элементов n в заданный временной интервал p. При превышении ограничения, сервис блокирует последующую обработку на долгое время.
Задача заключается в реализации клиента к данному внешнему сервису, который позволит обрабатывать максимально возможное количество объектов без блокировки. Приводить реализацию внешнего сервиса необязательно!
Определение сервиса:
package main
import (
"context"
"errors"
"time"
)
// ErrBlocked reports if service is blocked.
var ErrBlocked = errors.New("blocked")
// Service defines external service that can process batches of items.
type Service interface {
GetLimits() (n uint64, p time.Duration)
Process(ctx context.Context, batch Batch) error
}
// Batch is a batch of items.
type Batch []Item
// Item is some abstract item.
type Item struct{}
Требования
- язык программирования Golang.
- решение должно быть в git-репозитории (можно прислать архив или опубликовать на github, gitlab, bitbucket...).
Пожелания
- документирование кода;
- тесты;
- использование статического анализатора (конфигурацию положить в репозиторий).
Варианты решений можно присылать в комментарии.
❤️, если нравится такие задачи.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Gitea – инструмент, который позволяет развернуть self-hosted git-сервис на подобии github или gitlab
Поскольку Gitea написана на Go, она работает на всех платформах и архитектурах, поддерживаемых Go, включая Linux, macOS и Windows на архитектурах x86, amd64, ARM и PowerPC
#Go #Git #Useful
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Asynq – простая, надежная и эффективная очередь задач в Go
Обзор работы Asynq:
• Клиент ставит задачи в очередь
• Сервер извлекает задачи из очередей и запускает рабочую рутину для каждой задачи
• Задачи обрабатываются одновременно несколькими «обработчиками»
Очереди задач используются в качестве механизма распределения работы между несколькими машинами.
Работает с Redis.
#Go #Task #Queue
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM