Cách kết nối với cơ sở dữ liệu Postgres trong ứng dụng Go với GORM

Cách kết nối với cơ sở dữ liệu Postgres trong ứng dụng Go với GORM

Chia sẻ kiến thức 28/12/2022

Sử dụng cấu trúc dữ liệu của Go, bạn có thể tích hợp các ORM phổ biến của bên thứ ba như GORM để tương tác với cơ sở dữ liệu của mình một cách dễ dàng.

 

Postgres là một trong những cơ sở dữ liệu SQL phổ biến vì có nhiều tính năng và dễ sử dụng. Postgres tuân thủ ACID với các tính năng như Kiểm soát đồng thời nhiều phiên bản, sao chép không đồng bộ, giao dịch lồng nhau và ghi nhật ký ghi trước (write-ahead logging). Cùng với nhiều thứ khác, những tính năng này giúp cho Postgres trở thành hệ thống quản lý cơ sở dữ liệu SQL phổ biến.

Hệ sinh thái Go là nơi có nhiều gói để tương tác với các DBMS khác nhau, bao gồm cả Postgres. Go cung cấp gói database/sql tích hợp để làm việc với cơ sở dữ liệu SQL bằng trình điều khiển (driver) cơ sở dữ liệu. Sử dụng cấu trúc dữ liệu của Go, bạn có thể tích hợp các ORM phổ biến của bên thứ ba như GORM để tương tác với cơ sở dữ liệu của mình một cách dễ dàng.

 

Bắt đầu với GORM và Postgres

trang chủ GORM

Gói GORM là một trong những ORM phổ biến nhất trong hệ sinh thái Go vì thân thiện với nhà phát triển, giàu tính năng và được xây dựng trên gói database/sql.

GORM cung cấp chức năng cho di chuyển (migration) tự động, ghi nhật ký, prepared statement (câu lệnh được chuẩn bị), giao dịch và phân đoạn (sharding). Gói sử dụng cách tiếp cận code-first (trước tiên là code) bằng cách sử dụng struct (cấu trúc) và các loại dữ liệu tích hợp khác.

Chạy lệnh terminal này trong thư mục làm việc của bạn để thêm gói GORM vào phần phụ thuộc của dự án:

go get gorm.io/gorm\n

Bạn sẽ cần một driver cơ sở dữ liệu để gói GORM hoạt động. GORM cung cấp driver cơ sở dữ liệu cho DBMS phổ biến. Chạy lệnh này trong thư mục làm việc của bạn để cài đặt driver GORM Postgres :

go get gorm.io/driver/postgres\n

Kết nối Postgres với Go bằng GORM

Nhập các gói này vào tệp Go của bạn để hoạt động với driver cơ sở dữ liệu và ORM. Bạn sẽ sử dụng gói log để ghi lỗi vào bảng điều khiển (console) của mình và gói fmt để in đầu ra.

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

Bạn sẽ cần một chuỗi kết nối để kết nối với cơ sở dữ liệu Postgres của mình trong môi trường đang chạy. Bạn có thể sử dụng cấu trúc làm mô hình cho các trường tạo nên chuỗi kết nối. Sử dụng struct giúp thay đổi và kiểm tra các giá trị khác nhau dễ dàng hơn, đặc biệt là trong trường hợp dependency injection (một object cung cấp các dependencies của một object khác).

Đây là một mô hình struct ví dụ cho các trường tạo nên chuỗi kết nối:

type Config struct {\n Host string\n Port string\n Password string\n User string\n DBName string\n SSLMode string\n}\n

Dưới đây là một hàm (function) điển hình cho kết nối cơ sở dữ liệu của bạn, trả về phiên bản kết nối và lỗi tùy thuộc vào trạng thái kết nối.

func NewConnection() (*gorm.DB, error) {\n return db, nil\n}\n

Bạn có thể khởi tạo mô hình struct kết nối và điền vào các trường bằng các giá trị trong cơ sở dữ liệu Postgres của mình.

    configurations := Config{\n Host: "database_Host",\n Port: "database_Port",\n Password: "database_Password",\n User: "database_User",\n DBName: "database_Name",\n SSLMode: "false",\n }\n dsn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=%s", configurations.Host, configurations.Port, configurations.User, configurations.Password, configurations.DBName, configurations.SSLMode)\n

Biến dsn sử dụng phương thức định dạng Sprintf và các động từ định dạng chuỗi Go để nối các trường của cấu trúc Config và thiết lập chuỗi kết nối Postgres.

Bạn có thể mở một kết nối cơ sở dữ liệu với GORM bằng phương thức Open (mở). Phương thức Open nhận một kết nối mở từ driver cơ sở dữ liệu và danh sách các cấu hình tùy chọn từ loại Config của gói GORM và trả về một phiên bản kết nối và một lỗi tùy chọn.

    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})\n if err != nil {\n return db, err\n }\n

Ping cơ sở dữ liệu để xác minh trạng thái kết nối

Bạn có thể ping cơ sở dữ liệu để xác minh tình trạng sức khỏe/trạng thái trực tuyến bằng một hàm trả về kết quả boolean hoặc lỗi nếu kết nối cơ sở dữ liệu không hợp lệ.

func PingDb() (bool, error) {\n \n return true, nil\n}\n

Bạn sẽ cần tạo một phiên (instance) kết nối mới để ping cơ sở dữ liệu. Đây là một ví dụ sử dụng hàm NewConnection để tạo một phiên kết nối:

    connectionInstance, err := NewConnection()\n if err != nil {\n log.Fatalf("The database connection failed %v", err.Error())\n }\n

Khi bạn đã có được một phiên kết nối, hãy tạo một phiên cơ sở dữ liệu bằng phương thức DB của kết nối.

    dbConnection, err := connectionInstance.DB()\n if err != nil {\n return false, err\n } \n

Bạn có thể ping cơ sở dữ liệu bằng phương thức Ping của phiên cơ sở dữ liệu. Phương thức Ping trả về bất kỳ lỗi nào hoặc nil nếu kết nối thành công.

\n err = dbConnection.Ping()\n if err != nil {\n return false, err\n } else {\n \n fmt.Println("The connection was successful")\n }\n

Chạy thành công sẽ dẫn đến đầu ra như sau:

đầu ra kết nối thành công

Sử dụng gói database/sql để làm việc với cơ sở dữ liệu SQL trong Go

Gói database/sql có thể mở rộng và vì hầu hết các driver và gói cơ sở dữ liệu Go đều mở rộng gói, nên bạn có thể sử dụng gói này trong các dự án của mình thay vì ORM.

Vân Nguyễn

Dịch từ: https://www.makeuseof.com/gorm-go-postgres-connect-database/

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại