Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Как использовать GORM и Golang Migrate с PostgreSQL


Как использовать GORM и Golang Migrate с PostgreSQL


Шаг 0. Необходимые компоненты

Почитать:
https://gorm.io/index.html

PostgreSQL - это надежная система реляционных баз данных с открытым исходным кодом
Вы можете эффективно интегрировать ее с Go (Golang), используя библиотеку GORM
GORM упрощает взаимодействие с базами данных, предоставляя платформу объектно-реляционного отображения (ORM)
В этом подробном руководстве мы расскажем вам об основных шагах по настройке GORM с PostgreSQL в приложении Go
Подключимся к PostgreSQL, определим модели, выполним CRUD-операции (создавать, читать, обновлять, удалять)

Прежде чем мы начнем, убедитесь, что у вас есть следующие необходимые компоненты

Среда Go: Установите Go, если вы еще этого не сделали. Вы можете загрузить его с официального веб-сайта Go.

База данных PostgreSQL: PostgreSQL должен быть установлен и запущен.
Убедитесь, что у вас есть доступ к экземпляру базы данных PostgreSQL с необходимыми учетными данными.
Убедитесь, что сервер PostgreSQL доступен из вашего приложения Go.

Библиотека GORM: Установите библиотеку GORM с помощью go get:
go get -u gorm.io/gorm
go get -u gorm.io/driver/postgres


Шаг 1. Настройка среды GORM

Первым шагом является настройка среды GORM в вашем проекте Go.

Создайте файл Go (например, main.go) и импортируйте необходимые пакеты.:
package main

import (
    "gorm.io/driver/postgres"
    "gorm.io/gorm"
    "log"
)


Шаг 2: Подключение к базе данных PostgreSQL

Затем установите соединение с базой данных PostgreSQL с помощью GORM.

Создайте функцию для выполнения этой задачи.:
func connectToPostgreSQL() (*gorm.DB, error) {
    dsn := "user=username password=password dbname=dbname host=localhost port=5432 sslmode=disable"
    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
    if err != nil {
        return nil, err
    }

    return db, nil
}

Замените "user", "password", "dbname", "localhost", "5432" и "sslmode" учетными данными PostgreSQL.


Шаг 3: Определение моделей

В GORM модели представляют таблицы базы данных.

Определите свои модели как структуры Go с соответствующими тегами полей, чтобы сопоставить их столбцам PostgreSQL.

Например, давайте создадим “пользовательскую” модель:
type User struct {
    ID       uint   `gorm:"primaryKey"`
    Username string `gorm:"unique"`
    Email    string
}


Шаг 4: Миграция базы данных

GORM предоставляет функцию автоматической миграции базы данных, которая создает таблицы на основе определений вашей модели.

В вашей основной функции вызовите функцию автоматической миграции для выполнения этой миграции:
func main() {
    db, err := connectToPostgreSQL()
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // Perform database migration
    err = db.AutoMigrate(&User{})
    if err != nil {
        log.Fatal(err)
    }

    // Your CRUD operations go here
}

Этот код гарантирует, что таблица “User” будет создана в базе данных PostgreSQL.


Шаг 5: Выполнение операций CRUD

Теперь давайте выполним операции CRUD с помощью GORM.

Create (Insert) Operation:
func createUser(db *gorm.DB, user *User) error {
    result := db.Create(user)
    if result.Error != nil {
        return result.Error
    }
    return nil
}

Read (Query) Operation:
func getUserByID(db *gorm.DB, userID uint) (*User, error) {
    var user User
    result := db.First(&user, userID)
    if result.Error != nil {
        return nil, result.Error
    }
    return &user, nil
}

Update Operation:
func updateUser(db *gorm.DB, user *User) error {
    result := db.Save(user)
    if result.Error != nil {
        return result.Error
    }
    return nil
}

Delete Operation:
func deleteUser(db *gorm.DB, user *User) error {
    result := db.Delete(user)
    if result.Error != nil {
        return result.Error
    }
    return nil
}


Шаг 6: Собираем все это воедино

Инструкция по запуску миграций написана для ОС Ubuntu 22.04

Версия go должна быть >=1.19

Установка необходимой версии на примере 1.19 golang:
$ sudo apt-get remove golang-go
$ sudo apt-get remove --auto-remove golang-go
$ sudo add-apt-repository ppa:longsleep/golang-backports
$ sudo apt-get update
$ sudo apt-get install golang-go
$ sudo apt-get install golang-1.19
$ ln -s /usr/lib/go-1.19/bin/go /usr/bin/

$ go version
go version go1.19.5 linux/amd64

Подтягиваем зависимости для запуска миграций:
$ cd /opt
$ go mod init module-name
$ go env -w GO111MODULE=auto
$ go get gorm.io/gorm
$ go get gorm.io/driver/postgres

Давайте создадим простую программу Go, которая:
1. подключается к PostgreSQL
2. выполняет операции CRUD
3. отображает результаты

main.go:
package main

import (
    "gorm.io/driver/postgres"
    "gorm.io/gorm"
    "log"
    "fmt"
)

type User struct {
    ID       uint   `gorm:"primaryKey"`
    Username string `gorm:"unique"`
    Email    string
}

func createUser(db *gorm.DB, user *User) error {
    result := db.Create(user)
    if result.Error != nil {
        return result.Error
    }
    return nil
}

func getUserByID(db *gorm.DB, userID uint) (*User, error) {
    var user User
    result := db.First(&user, userID)
    if result.Error != nil {
        return nil, result.Error
    }
    return &user, nil
}

func updateUser(db *gorm.DB, user *User) error {
    result := db.Save(user)
    if result.Error != nil {
        return result.Error
    }
    return nil
}

func deleteUser(db *gorm.DB, user *User) error {
    result := db.Delete(user)
    if result.Error != nil {
        return result.Error
    }
    return nil
}

func main() {
    dsn := "user=your_username password=your_pass dbname=your_dbname host=127.0.0.1 port=5432 sslmode=disable"
    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Successfully connected!")

    // Perform database migration
    err = db.AutoMigrate(&User{})
    if err != nil {
        log.Fatal(err)
    }

    // Create a new user
    newUser := &User{Username: "john_doe", Email: "john_doe_1@local"}
    err = createUser(db, newUser)
    if err != nil {
        log.Fatal(err)
    }
    log.Println("Created User:", newUser)

    // Query user by ID
    userID := newUser.ID
    user, err := getUserByID(db, userID)
    if err != nil {
        log.Fatal(err)
    }
    log.Println("User by ID:", user)

    // Update user
    user.Email = "john_doe_2@local"
    err = updateUser(db, user)
    if err != nil {
        log.Fatal(err)
    }
    log.Println("Updated User:", user)

    // Delete user
    err = deleteUser(db, user)
    if err != nil {
        log.Fatal(err)
    }
    log.Println("Deleted User:", user)
}

Запуск тестовой миграции:
$ go run /opt/migrate.go
Successfully connected!
2024/1/1 12:11:33 Created User: &{1 john_doe john_doe_1@local}
2024/1/1 12:11:33 User by ID: &{1 john_doe john_doe_1@local}
2024/1/1 12:11:33 Updated User: &{1 john_doe john_doe_2@local}
2024/1/1 12:11:33 Deleted User: &{1 john_doe john_doe_2@local}

 

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект