37.1K subscribers
1.46K photos
33 videos
5 files
1.62K links
加入频道
👣 6 советов по повышению производительности в Go

Цель статьи — обсудить 6 советов для новичков, которые могут помочь в диагностике и устранении проблем с производительностью в ваших приложениях Go.

Читать

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Тестовое задание Advertising

Описание задачи
Необходимо создать сервис для хранения и подачи объявлений. Объявления должны храниться в базе данных. Сервис должен предоставлять API, работающее поверх HTTP в формате JSON.

Метод получения списка объявлений

Пагинация: на одной странице должно присутствовать 10 объявлений;
Cортировки: по цене (возрастание/убывание) и по дате создания (возрастание/убывание);
Поля в ответе: название объявления, ссылка на главное фото (первое в списке), цена.
Метод получения конкретного объявления

Обязательные поля в ответе: название объявления, цена, ссылка на главное фото;
Опциональные поля (можно запросить, передав параметр fields): описание, ссылки на все фото.
Метод создания объявления:

Принимает все вышеперечисленные поля: название, описание, несколько ссылок на фотографии (сами фото загружать никуда не требуется), цена;
Возвращает ID созданного объявления и код результата (ошибка или успех).
Реализация
Следование дизайну REST API.
Подход "Чистой Архитектуры" и техника внедрения зависимости.
Работа с фреймворком echo.
Работа с БД Postgres с использованием библиотеки sqlx и написанием SQL запросов.

Конфигурация приложения - библиотека viper.
Реализация Graceful Shutdown.
Запуск из Docker.
Юнит-тестирование уровней обработчиков, бизнес-логики и взаимодействия с БД классическим способом и с помощью моков - библиотеки testify, mock.
Сквозное (E2E) тестирование - BDD фреймворк goconvey.
Проверка кода на соответствие стандартам с помощью линтера - утилита golangci-lint
Автоматическое создание документации с помощью Swagger 2.0 - библиотека echo-swagger.
Непрерывная интеграция - сборка приложения, проверка линтером и запуск тестов в Github action.
Структура проекта:

.
├── pkg
│ ├── error_message // сообщения об ошибках
│ ├── model // основные структуры
│ ├── handler // обработчики запросов
│ ├── service // бизнес-логика
│ └── repository // взаимодействие с БД
├── cmd // точка входа в приложение
├── migrations // SQL файлы с миграциями
├── scripts // SQL файлы с тестовыми данными
├── configs // файлы конфигурации
├── test // инициализация тестовой БД
└── e2e_test.go // сквозной тест


Архитектура
Приложение имеет 3 основных слоя, реализованных в отдельных пакетах.

Repository - слой взаимодействия с БД. Методы этого слоя принимают данные от Service и выполняют запросы к БД.
Service - слой бизнес-логики. Методы этого слоя принимают данные от Handler и применяют к ним бизнес-правила для достижения цели варианта использования.
Handler - слой обработчиков запросов. Содержит методы-обработчики для endpoints.
Пакет Model содержит структуры сущностей, используемых остальными слоями.

Endpoints
GET /api/adverts - получение списка объявлений
Параметры запроса:
page - номер страницы,
sort - параметры сортировки в формате [поле сортировки]_[порядок сортировки] (например price_desc).
GET /api/adverts/:id - получение объявления по id
Параметры запроса: - fields - флаг, если равен True, то вернуть все поля, иначе вернуть название, ссылку на главное фото и цену.
POST /api/adverts - создание объявления
Тело запроса:
title - название объявления,
description - описание объявления,
photos - ссылки на фотографии,
price - цена.

Задание

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🌩 Vanus

Vanus - это бессерверная система потоковой передачи событий с возможностями обработки.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Go 1.20 and 1.19.9 are released!

🔐 Security: Includes security fixes for html/template (CVE-2023-24539, CVE-2023-24540, and CVE-2023-29400).

https://groups.google.com/g/golang-announce/c/MEb0UyuSMsU

⚜️ Загрузить: https://go.dev/dl/#go1.20.4

#golang

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

Быстрый и элегантный фреймворк для скраппинга на Go.

Colly предоставляет интерфейс для написания любого вида скрапера.


🖥 Github
⭐️ Guide

#golang

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 20 библиотек Go для автоматизации.

1. Go-resty
Go-resty - это, удобная клиентская библиотека HTTP для Golang, которая упрощает процесс выполнения запросов RESTful API.

2. Goquery
Goquery - это библиотека для веб-скрейпинга, которая предоставляет jQuery-подобный синтаксис для манипулирования запросами. Она позволяет разработчикам легко извлекать информацию с веб-сайтов.

3. Colly
Colly - это высокопроизводительный, расширяемый фреймворк для веб-скрейпинга на языке Golang.

4. Gobot
Gobot - это Golang-фреймворк для робототехники, дронов и IoT-устройств, который предоставляет единый интерфейс для управления различными аппаратными и программными платформами. Статья с примерами работы.

5. Agouti
Agouti - это библиотека Golang, которая позволяет разработчикам управлять веб-браузерами для сквозного тестирования и автоматизации. Она поддерживает WebDriver, PhantomJS и ChromeDP, предоставляя единый API для задач автоматизации браузера.

6. Terratest
Terratest это библиотека Golang, которая упрощает тестирование и проверку кода инфраструктуры, особенно для Terraform, Kubernetes и AWS.

7. Testify
Testify - это комплексный набор инструментов для тестирования Golang, который предоставляет простой, но мощный API для, мокинга и создания тестов.

8. GoConvey
GoConvey - это система тестирования и непрерывной интеграции для Golang, которая предлагает веб-интерфейс для визуализации результатов тестирования. Он упрощает процесс написания и выполнения автоматизированных тестов.

9. Moby
Moby - это проект с открытым исходным кодом для создания систем на основе контейнеров.

10. Docker Go SDK
Docker Go SDK - это официальная библиотека Golang для взаимодействия с API Docker.

11. Go-cmp
Go-cmp - это библиотека Golang для сравнения сложных структур данных. Она особенно полезна для написания автоматизированных тестов, которым необходимо сравнить вывод функций с ожидаемыми результатами.

12. Go-ethereum
Go-ethereum - это официальная реализация протокола Ethereum на языке Golang.

13. Logrus
Logrus это гибкая, структурированная библиотека протоколирования для Golang.

14. Cobra
Cobraэто библиотека Golang, которая упрощает создание приложений командной строки.

15. Viper
Viperэто библиотека конфигурации Golang, которая поддерживает различные форматы, такие как JSON, TOML, YAML и HCL.

16. Kubernetes Client-go
Client-go - это официальная клиентская библиотека Golang для Kubernetes, позволяющая разработчикам программно взаимодействовать с API Kubernetes. Она упрощает автоматизацию задач, связанных с управлением кластером Kubernetes.

17. Gorm
Gorm - это удобная для разработчиков библиотека ORM (Object-Relational Mapper) для Golang. Она предоставляет простой, но мощный API для управления операциями с базами данных, упрощая автоматизацию задач, связанных с бд.

18. Go-selenium
Go-selenium - это библиотека Golang для взаимодействия с API Selenium WebDriver.

19. Go-swagger
Go-swagger - это набор инструментов для работы со спецификацией OpenAPI на языке Golang. Он включает в себя генератор кода, промежуточное программное обеспечение и инструменты проверки, которые облегчают автоматизацию задач, связанных с проектированием, разработкой и тестированием API.

20. Revel
Revel - это высокопроизводительный, полнофункциональный веб-фреймворк для Golang, включающий такие функции, как маршрутизация, валидация и кэширование. Он упрощает разработку веб-приложений и позволяет автоматизировать различные задачи в процессе разработки.

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Бесплатные курсы по изучению Golang в 2023 году

В этой статье я поделился лучшими бесплатными онлайн-курсами по изучению Golang на таких сайтах, как freeCodecamp, YouTube, Udemy и Coursera .

Читать

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

1. DDosify — Performance Testing Platform
DDosify - это хороший инструмент, если вы хотите проверить, как поведет себя ваше приложение при большом количестве пользователей, обращающихся к нему со всего мира.

2. Kopia — Cross-platform Backup Tool
Kopia предлагает удобный и простой способ создания копий зашифрованных и сжатых данных и сохранения в облачном хранилище.

3. Traefik — Reverse Proxy And Load Balancer
Traefik довольно популярен, поэтому вы, возможно, уже знакомы с ним. Это хороший инструмент для самостоятельной настройки прокси для ваших микросервисов.

4. Httpx — HTTP Toolkit
С помощью Httpx можно регулярно отправлять запросов для получения данных о веб-сайтах. Мне нравится использовать его для проверки работоспособности моих сайтов и приложений.

5. Evcc — Extensible EV Charge Controller
Evcc - это многоязычный контроллер для электромобилей на Go.

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Oracle on Docker: Running Oracle Databases in Linux Containers (2023)
Автор: Sean Scott

📚 Книга

@Golang_google
👣 Age

Простой, современный и безопасный инструмент шифрования на Go.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Golang implementation of PASETO: Platform-Agnostic Security Tokens

PASETO - это все, что мы любим в JOSE (JWT, JWE, JWS), без многочисленных недостатков, которые присущи стандартам JOSE.

🖥 Github

#golang

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 [По полочкам] Кэширование

Эта статья дает структурированную основу и раскрывает ряд неочевидных особенностей кэширования.

Читать

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 SCS: HTTP Session Management for Go

Удобный инструмент для реализации сессии в вашем проекте. Для этого пакета нужна версия Go 1.12 и выше.

$ go get github.com/alexedwards/scs/v2

🖥 Github

#golang

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
15 Курсов по Go для начинающих

Мы собрали ссылки на полезные курсы Golang для начинающих.

Читать

#golang #junior

@Golang_google
👣 Альтернативные библиотеки на Go ИИ библиотекам на Python.

Мы рассмотрим библиотеки для машинного
обучения, обработки естественного языка, компьютерного зрения и других задач ИИ.


Python Golang Описание
NumPy ➡️ Gonum

NumPy - популярная библиотека Python для обработки многомерных массивов и матриц, выполняющая множество математических операций, что делает ее идеальной для проектов искусственного интеллекта. Gonum предоставляет аналогичную функциональность в Go.

Scikit-learn ➡️ Golearn.
Scikit-learn - это библиотека машинного обучения, построенная на NumPy и SciPy, поддерживающая алгоритмы контролируемого и неконтролируемого обучения. Golearn - это аналогичная библиотека для Go, предлагающая ряд моделей и утилит.

Pandas ➡️ Dataframe-go
Pandas - это библиотека Python для подготовки высокоуровневых наборов данных для машинного обучения и тренировки моделей. Dataframe-go предоставляет аналогичную функциональность для манипулирования данными в Go.

TensorFlow ➡️ Gorgonia
TensorFlow библиотека с открытым исходным кодом Python используется для разработки и оценки моделей машинного обучения и глубокого обучения. Gorgonia - это аналогичная библиотека для машинного обучения на Go.

Seaborn ➡️ Gonum/plot
Seaborn - это библиотека Python, используемая для визуализации данных в проектах ML. Gonum/plot предоставляет аналогичные возможности визуализации данных в Go.

Theano ➡️ Gorgonia
Theano - это библиотека Python для численных вычислений и машинного обучения. Gorgonia предоставляет аналогичные возможности в Go.

Keras ➡️ Gorgonia
Keras - это библиотека Python для разработки нейронных сетей для ML-моделей. Gorgonia предоставляет аналогичные возможности для создания нейронных сетей на Golang.

PyTorch ➡️ Gorgonia
PyTorch - это Python-библиотека машинного обучения с открытым исходным кодом, которая в основном используется в приложениях, связанных с обработкой естественного языка или компьютерного зрения. Gorgonia - это библиотека для машинного обучения на языке Go.

Matplotlib ➡️ Gonum/plot
Matplotlib - это библиотека Python, ориентированная на визуализацию данных и используемая в основном для создания графиков, диаграмм, гистограмм и тд. Gonum/plot предоставляет аналогичные возможности визуализации данных в Go.

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

LinGoose (Lingo + Go + Goose ) библиотека Go для создания LLM-моделей.(больших языковых моделей).

Github
Проект

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Задача. Подсчет уникальных символов всех подстрок заданной строки

Сложность задачи: Hard

Условие задачи:

Определим функцию countUniqueChars(s), которая возвращает количество уникальных символов в s.

Например, вызов countUniqueChars(s), если s = "LEETCODE", тогда "L", "T", "C", "O", "D" являются уникальными символами, поскольку они появляются только один раз в s, поэтому countUniqueChars(s ) = 5.
Для строки s вернуть сумму countUniqueChars(t), где t — подстрока s. Тестовые примеры генерируются таким образом, чтобы ответ помещался в 32-битное целое число.

Обратите внимание, что некоторые подстроки могут повторяться, поэтому в этом случае вам также придется считать повторяющиеся.

Строка s состоит только из заглавных английских букв.

Пример:
Ввод: s = "ABC"
Вывод: 10
Объяснение:
Все возможные подстроки: «A», «B», «C», «AB», «BC» и «ABC».
Каждая подстрока состоит только из уникальных букв.
Сумма длин всех подстрок равна 1 + 1 + 1 + 2 + 2 + 3 = 10

Ввод: s = "ABA"
Вывод: 8

Решение.

Пишите свое решение в комментариях 👇

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание CRUD-приложения с чистой архитектурой в Go

В этой статье мы создадим API с CRUD функциональностью (Create, Read, Update, Delete), используя Clean Architecture.

В проекте мы будем использовать MySQL в качестве базы данных, Echo в качестве фреймворка и GORM в качестве ORM.

Читать

@Golang_google
👣 Casbin

Продвинутая библиотека для реализации авторизации на сайте, которая поддерживает ACL, RBAC и многое другое.

Github

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

Удобный анализатор логов на предмет подозрительной активности.

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

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