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

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

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

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


GO GORM POSTGRES MIGRATIONS


GO GORM POSTGRES MIGRATIONS

Инструкция по запуску миграций написана для ОС 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 run /opt/migrate.go
Successfully connected!
2024/11/30 12:12:56 Created User: &{1 john_doe john_doe_1@local}
2024/11/30 12:12:56 User by ID: &{1 john_doe john_doe_1@local}
2024/11/30 12:12:56 Updated User: &{1 john_doe john_doe_2@local}
2024/11/30 12:12:56 Deleted User: &{1 john_doe john_doe_2@local}

Код программы миграций:
$ cat migrate.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=app_user_go password=111 dbname=app_db_go 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)
}

 


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

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

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

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

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





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