37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
🖥 Как запускать SQL в Go с максимальным комфортом

Писать SQL руками или использовать ORM — тема очень спорная, и я опишу, как использовать первый подход максимально эффективно. А какой из подходов выбрать, думаю, каждый сам для себя уже решил.

Я не буду описывать то, что уже описано в документации, речь пойдёт про использование встроенного пакета для работы с базами данных database/sql и надстройки над этим пакетом под названием sqlx. Также будет пара примеров для работы только с PostgreSQL.

Всё описанное ниже хорошо работает в большом проекте, в котором очень активно используется SQL, когда мест, где запускаются запросы, больше 100, к примеру.

Примеры кода можно посмотреть в репозитории. Этот код я написал специально для статьи, так что, возможно, допустил где-то ошибки. Но он очень похож на то, что используется у нас в проекте.

➡️ Читать дальше
🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Как создать MVP бэкенда

Показываем, какой MVP бэкенда можно разработать для приложения по отслеживанию процессов в компании. В качестве языка использован Go.

Читать: «Как создать MVP бэкенда»

@Golang_google
👣 Bucketeer-io/bucketeer

Платформа для A/B-тестирования

🔩 Github
📝 Документация

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

Симпатичный пакет печати Go (альтернатива fmt), минималистичный, без зависимостей!

go get -u github.com/zakaria-chahboun/cute@latest

🔩 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Fman

Fman быстрый файловый менеджер для терминала, написанный на GO

Имеет чистый интерфейс с подсветкой синтаксиса и поддержкой различных тем

$ go install github.com/nore-dev/fman@latest

🔩 Github

#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
👣 Полезные библиотеки Go

Ddosify
- очень простой в использовании инструмент для нагрузочного тестирования веб ресурсов.

Поддерживает HTTP, HTTPS, HTTP/2 протоколы.

➡️ GitHub/Инструкция

#go #golang #hack #pentest

@github_code
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Понимание Go Inline оптимизации на примере

В эпоху мобильного Интернета масштабы бизнес-систем, которые непосредственно сталкиваются с C-пользователем, как правило, очень велики, и машинные ресурсы, потребляемые системой, также весьма значительны. Количество ядер ЦП и памяти, используемых системой, поглощают реальные деньги компании. Сведение к минимуму потребления ресурсов одним экземпляром службы без снижения уровня обслуживания, что обычно известно как «есть меньше травы и производить больше молока», всегда было целью операторов каждой компании, и некоторые компании могут сэкономить сотни тысяч долларов в год за счет сокращения количества используемых ядер процессора на 1%.

При одинаковом выборе языка программирования важно постоянно снижать потребление сервисных ресурсов. Более естественно и просто полагаться, с одной стороны, на разработчиков, которые будут постоянно совершенствовать производительность своего кода, а с другой — на компиляторов языка программирования, чтобы улучшить результаты с точки зрения оптимизации компиляции. Однако эти два аспекта также дополняют друг друга: если разработчики смогут более тщательно понять сценарии и инструменты оптимизации компилятора, они смогут написать более дружественный код для оптимизации компиляции и, таким образом, получить лучшие результаты оптимизации производительности.

➡️ Читать дальше

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Создание обратного прокси-сервера (gRPC-Gateway)

В этой статье мы рассмотрим создание API со следующим шагом реализации обратного прокси.

Мы будем использовать docker и docker-compose, поэтому я рекомендую сначала установить docker и docker-compose и убедиться, что вы можете запускать контейнеры.

➡️ Читать дальше

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 GoCover — инструмент для оценки покрытия кода тестами для всех пакетов Go

Покрытие кода предполагает проведение множества тестов, а это часто может быть опасно. Инструмент преодолевает это ограничение, исполняя код в изолированной среде — внутри контейнера Docker. Для этого необходимо лишь ввести адрес репозитория и нажать на кнопку. На экране отобразится процент покрытия кода, а покрытые и непокрытые области выделятся разным цветом.

Стоимость: #бесплатно.

#devOps #Golang

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Focalboard - бесплатная замена Trello, Notion и Asana с открытым исходным кодом.

Варианты использования:
Установка на собственный сервер с возможностью работать над проектами вместе.
Установка на компьютер как обычное приложение.

Поддерживает Linux, Mac и Windows.

🔩 GitHub/Инструкция

#typescript #go

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Goose — инструмент для миграции баз данных

Может запускать миграции в виде файлов SQL на диске или встроенных в функции Go. Это означает, что вы можете отправить автономный двоичный файл для выполнения миграций без каких-либо зависимостей. Поддерживает неупорядоченные миграции. Имеется поддержка БД: Redshift, MySQL, Postgres, Clickhouse и другие.

Стоимость: #бесплатно.

$ go install github.com/pressly/goose/v3/cmd/goose@latest

🖥 Github
➡️ Инструкции к установке

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Golang-дайджест № 22 (1 – 31 октября 2022)

Свежая подборка новостей и материалов

Новости, события
- Выпущены 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
🔧 Сайт-шпаргалка по языку Go

https://devhints.io/go

#go #cheatsheet
👣 Пишем поддерживаемый код модульного тестирования в Golang

Эта статья посвящена ремонтопригодности кода модульного тестирования, не знаю, писали ли вы когда-нибудь модульный тест в 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
🖥 Как оркестровать микросервисы с помощью Docker Compose

Большинство современных программных систем имеют микросервисную архитектуру. Для стека микросервисных технологий 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
⭐️ termdashинструмент для отрисовки дашбордов прямо в терминале

Сам проект кроссплатформенный, а также имеет открытое API для создания плагинов

🖥 Github

#Go #Terminal

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Обработка ошибок Golang gRPC

Наиболее распространенным способом обработки ошибок в 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
👣 Тестовое задание для стажера в юнит buyer-experience

#практика

Необходимо реализовать сервис, позволяющий следить за изменением цены любого объявления на Авито (другой аналогичный сайт с объявлениями):

1. Сервис должен предоставить HTTP метод для подписки на изменение цены. На вход метод получает - ссылку на объявление, email на который присылать уведомления.

2.После успешной подписки, сервис должен следить за ценой объявления и присылать уведомления на указанный email.

3. Если несколько пользователей подписались на одно и тоже объявление, сервис не должен лишний раз проверять цену объявления.

Требования к решению

- Необходимо проработать архитектуру сервиса и описать принципиальную схему работы в виде текста и/или диаграмм.
- Приложить фрагменты кода, решающие конкретные задачи:
- Подписка на изменение цены
- Отслеживание изменений цены
- Отправка уведомления на почту
Работа с БД
- Язык программирования Golang.

Чтобы получить цену объявления, можно:
- парсить web-страницу объявления
- самостоятельно проанализировать трафик на мобильных приложениях или мобильном сайте и выяснить какой там API для получения информации об объявлении


Усложнения
- Реализовать полноценный сервис, который решает поставленную задачу (сервис должен запускаться в docker-контейнере).
- Написаны тесты (постарайтесь достичь покрытия в 70% и больше).
- Подтверждение email пользователя.

Ставьте ❤️, если вам интересно увидеть практические задания с реальных собеседований.

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM