Расскажите о вашем опыте работы с базами данных в Go-проектах.

Ответ

Да, у меня есть обширный опыт работы с различными СУБД в контексте Go-разработки. Ключевые направления моего опыта:

  • Реляционные базы данных (SQL): Работал с PostgreSQL и MySQL. Проектировал схемы данных, писал сложные SQL-запросы, настраивал транзакции и оптимизировал производительность с помощью индексов и EXPLAIN.
  • NoSQL базы данных: Активно использовал MongoDB для хранения неструктурированных данных и Redis для кэширования и управления сессиями.
  • ORM и драйверы: В Go-проектах предпочитаю использовать GORM для быстрой разработки и sqlx или нативный database/sql для высоконагруженных частей системы, где требуется максимальный контроль над запросами.
  • Развертывание и администрирование: Есть опыт развертывания баз данных с использованием Docker и Docker Compose для локальной разработки и тестирования, а также опыт работы с управляемыми базами данных в облаках, такими как AWS RDS.

Пример подключения к PostgreSQL с использованием GORM:

package main

import (
    "log"

    "gorm.io/driver/postgres"
    "gorm.io/gorm"
)

// User - пример модели данных
type User struct {
    gorm.Model
    Name  string
    Email string `gorm:"unique"`
}

func main() {
    dsn := "host=localhost user=gorm password=gorm dbname=gorm port=5432 sslmode=disable TimeZone=Europe/Moscow"
    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
    if err != nil {
        log.Fatalf("Ошибка подключения к базе данных: %v", err)
    }

    // Автоматическая миграция схемы данных
    err = db.AutoMigrate(&User{})
    if err != nil {
        log.Fatalf("Ошибка миграции: %v", err)
    }

    log.Println("Подключение и миграция успешно завершены!")
    // Далее можно работать с базой данных, например, создавать пользователей:
    // db.Create(&User{Name: "John Doe", Email: "john.doe@example.com"})
}