Ответ
Я имею опыт работы с реляционными, NoSQL и in-memory базами данных. В каждом случае я использовал наиболее подходящие для Go инструменты и драйверы.
1. Реляционные БД (PostgreSQL, MySQL)
Для работы с SQL-базами я использовал как стандартную библиотеку database/sql
, так и популярные ORM.
database/sql
: Применял для написания нативных SQL-запросов, что дает полный контроль над производительностью и поведением. Отлично подходит для оптимизированных и сложных запросов.- ORM (GORM, sqlx): Использовал для ускорения разработки на CRUD-операциях и для более удобной работы с моделями данных в коде.
Пример подключения к PostgreSQL:
import (
"database/sql"
"context"
_ "github.com/lib/pq" // Драйвер для PostgreSQL
)
db, err := sql.Open("postgres", "user=... password=... dbname=... sslmode=disable")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// Проверяем, что соединение действительно установлено
if err := db.PingContext(context.Background()); err != nil {
log.Fatal(err)
}
2. NoSQL (MongoDB)
Для работы с документо-ориентированной базой MongoDB использовал официальный драйвер от MongoDB. Это было полезно в проектах, где требовалась гибкая схема данных.
import (
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
if err != nil {
log.Fatal(err)
}
3. In-Memory (Redis)
Redis активно применял для задач кеширования, управления сессиями и реализации простых очередей сообщений. Основной инструмент — библиотека go-redis
.
import "github.com/go-redis/redis/v8"
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
4. Аналитические и поисковые системы
Также есть опыт интеграции с ClickHouse для аналитических запросов в высоконагруженных системах и с Elasticsearch для реализации полнотекстового поиска.