«Создание Rest API с помощью Go анализ данных для временных рядов»
«Анализ данных для временных рядов с использованием Go для создания Rest API»
Пошаговый пример операций CRUD и статистического анализа с использованием Go, Gin и Gorm.

Введение
Эта статья иллюстрирует пример REST API, созданного на Go для выполнения операций CRUD (Создание, Чтение, Обновление, Удаление) и вычисления статистики на данных временных рядов.
Полный код, использованный в этой статье, доступен здесь.
Почему Go?
Go является распространенным выбором для создания REST API по нескольким причинам. Несмотря на то, что это эффективный скомпилированный язык, его синтаксис прост и читаем. Это позволяет легко реализовывать параллельную обработку. Он предоставляет богатую функциональность в стандартной библиотеке и имеет отличную экосистему библиотек и инструментов.
В этом примере мы используем две популярные библиотеки Go:
- Машинное обучение в тестировании программного обеспечения
- LoRA – Интуитивно и всеобъемлюще объяснено
- Очистка данных в Python
- Gin: веб-фреймворк, предоставляющий инструменты для создания веб-приложений.
- Gorm: полнофункциональное ORM (Object-Relational Mapping) для взаимодействия с базами данных.
Структура папок
Мы создаем одну папку для каждой “службы”. В Go каждая папка соответствует пакету, и каждый файл имеет доступ к элементам, определенным в других файлах в том же пакете. Вот структура папок, используемая в проекте:
├── database│ └── database.go├── models│ └── models.go├── handlers│ ├── routes.go│ ├── stats.go│ ├── timeseries.go│ └── timeseriesvalues.go├── stats│ └── stats.go├── go.mod├── go.sum└── main.go
Модели и база данных
Давайте начнем с определения моделей ORM в файле models.go для представления данных временных рядов. Мы используем две модели, одну для идентификации ряда и одну для хранения его значений. Каждое значение связано с временным рядом через внешний ключ.
type TimeSeries struct { ID int `gorm:"primaryKey"` Name string `gorm:"not null"`}type TimeSeriesValue struct { ID int `gorm:"primaryKey"` Time time.Time Value float64 TimeSeriesID int `gorm:"not null"`}