Симпатичный пакет печати Go (альтернатива fmt), минималистичный, без зависимостей!
go get -u github.com/zakaria-chahboun/cute@latest
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥3❤1
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
👍14🔥5❤1
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
👍16❤3🔥1
В эпоху мобильного Интернета масштабы бизнес-систем, которые непосредственно сталкиваются с C-пользователем, как правило, очень велики, и машинные ресурсы, потребляемые системой, также весьма значительны. Количество ядер ЦП и памяти, используемых системой, поглощают реальные деньги компании. Сведение к минимуму потребления ресурсов одним экземпляром службы без снижения уровня обслуживания, что обычно известно как «есть меньше травы и производить больше молока», всегда было целью операторов каждой компании, и некоторые компании могут сэкономить сотни тысяч долларов в год за счет сокращения количества используемых ядер процессора на 1%.
При одинаковом выборе языка программирования важно постоянно снижать потребление сервисных ресурсов. Более естественно и просто полагаться, с одной стороны, на разработчиков, которые будут постоянно совершенствовать производительность своего кода, а с другой — на компиляторов языка программирования, чтобы улучшить результаты с точки зрения оптимизации компиляции. Однако эти два аспекта также дополняют друг друга: если разработчики смогут более тщательно понять сценарии и инструменты оптимизации компилятора, они смогут написать более дружественный код для оптимизации компиляции и, таким образом, получить лучшие результаты оптимизации производительности.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2🔥2
В этой статье мы рассмотрим создание API со следующим шагом реализации обратного прокси.
Мы будем использовать docker и docker-compose, поэтому я рекомендую сначала установить docker и docker-compose и убедиться, что вы можете запускать контейнеры.
➡️ Читать дальше
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3👎2🔥1
Покрытие кода предполагает проведение множества тестов, а это часто может быть опасно. Инструмент преодолевает это ограничение, исполняя код в изолированной среде — внутри контейнера Docker. Для этого необходимо лишь ввести адрес репозитория и нажать на кнопку. На экране отобразится процент покрытия кода, а покрытые и непокрытые области выделятся разным цветом.
Стоимость: #бесплатно.
#devOps #Golang
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤2👎2🔥2
Варианты использования:
✅ Установка на собственный сервер с возможностью работать над проектами вместе.
✅ Установка на компьютер как обычное приложение.
Поддерживает Linux, Mac и Windows.
#typescript #go
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥11❤1
Может запускать миграции в виде файлов 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
👍20🔥4❤2
Свежая подборка новостей и материалов
Новости, события
- Выпущены 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
👍14🔥2❤1
Эта статья посвящена ремонтопригодности кода модульного тестирования, не знаю, писали ли вы когда-нибудь модульный тест в 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
👍10❤1🔥1
Большинство современных программных систем имеют микросервисную архитектуру. Для стека микросервисных технологий 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
👍7👎2❤1🔥1🤔1
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
👍22🔥4❤1😁1
Наиболее распространенным способом обработки ошибок в 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
👍20👎3❤1🔥1
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
❤127👍5🔥2🤬1
Тестовое задание для кандидата на должность 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
❤53👍6🔥2
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
👍20🔥2❤1
Asynq – простая, надежная и эффективная очередь задач в Go
Обзор работы Asynq:
• Клиент ставит задачи в очередь
• Сервер извлекает задачи из очередей и запускает рабочую рутину для каждой задачи
• Задачи обрабатываются одновременно несколькими «обработчиками»
Очереди задач используются в качестве механизма распределения работы между несколькими машинами.
Работает с Redis.
#Go #Task #Queue
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3🔥2
Если вы прочитали заголовок и подумали «ну, ты, наверно, сделал сначала что-то глупое», то вы правы! Но что такое программирование, как не упражнения в глупых ошибках? Поиск глупых ошибок — это и есть самое большое удовольствие!
Также стоит заранее сделать оговорку о бенчмаркинге: ускорение на 42% было замерено при выполнении программы с моими данными и на моём компьютере, поэтому относитесь к этому результату с долей скепсиса.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3👎3🔥1