Postgres là một trong những cơ sở dữ liệu SQL phổ biến nhờ 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. Cùng với nhiều tính năng khác, những tính năng này làm cho Postgres trở thành hệ thống quản lý cơ sở dữ liệu SQL.
Hệ sinh thái Go là nơi có nhiều gói để tương tác với nhiều DBMS khác nhau, bao gồm cả Postgres. Go cung cấp tích hợp sẵn cơ sở dữ liệu/sql gói để làm việc với cơ sở dữ liệu SQL bằng trình điều khiển 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 để dễ dàng tương tác với cơ sở dữ liệu của mình.
Bắt đầu với GORM và Postgres
Gói GORM là một trong những ORM phổ biến nhất trong hệ sinh thái Go vì nó 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 cơ sở dữ liệu/sql bưu kiện.
GORM cung cấp chức năng cho di chuyển tự động, ghi nhật ký, báo cáo đã chuẩn bị, giao dịch và phân đoạn. Gói sử dụng cách tiếp cận mã đầu tiên bằng cách sử dụng cấu trúc và các loại dữ liệu tích hợp khác.
Chạy lệnh đầu cuối 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/gormn
Bạn sẽ cần một trình điều khiển cơ sở dữ liệu để gói GORM hoạt động. GORM cung cấp trình điều khiển 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 GORM postgres người lái xe:
go get gorm.io/driver/postgresn
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 trình điều khiển cơ sở dữ liệu và ORM. Bạn sẽ sử dụng đăng nhập gói để ghi lỗi vào bảng điều khiển của bạn và fmt gói để 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 cấu trúc 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 tiêm phụ thuộc.
Đây là một mô hình cấu trúc ví dụ cho các trường tạo nên chuỗi kết nối:
type Config struct {n Host stringn Port stringn Password stringn User stringn DBName stringn SSLMode stringn}n
Dưới đây là một chức năng điển hình cho kết nối cơ sở dữ liệu của bạn. 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, niln}n
Bạn có thể khởi tạo mô hình cấu trúc 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
Các dsn biến sử dụng nước rút phương thức định dạng và Go động từ định dạng chuỗi để nối các trường của cấu hình struct và thiết lập chuỗi kết nối Postgres.
Bạn có thể mở kết nối cơ sở dữ liệu với GORM bằng cách sử dụng Mở phương pháp. Các Mở phương thức nhận một kết nối mở từ trình điều khiển cơ sở dữ liệu và danh sách các cấu hình tùy chọn từ cấu hình loại gói GORM. Nó 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, errn }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 của mình để 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, niln}n
Bạn sẽ cần tạo một phiên bản kết nối mới để ping cơ sở dữ liệu. Đây là một ví dụ sử dụng Kết nối mới chức năng để tạo một thể hiệ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 bản kết nối, hãy tạo một phiên bản cơ sở dữ liệu với ĐB phương thức kết nối.
dbConnection, err := connectionInstance.DB()n if err != nil {n return false, errn } n
Bạn có thể ping cơ sở dữ liệu với Bình phương thức của thể hiện cơ sở dữ liệu. Các Bình phương thức trả về bất kỳ lỗi hoặc không nếu kết nối thành công.
n err = dbConnection.Ping()n if err != nil {n return false, errn } else {n n fmt.Println("The connection was successful")n }n
Chạy thành công sẽ dẫn đến đầu ra tương tự như sau:
Bạn có thể sử dụng gói cơ sở dữ liệu/sql để làm việc với cơ sở dữ liệu SQL trong Go
Các cơ sở dữ liệu/sql gói có thể mở rộng và vì hầu hết các gói và trình điều khiển 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ì chọn ORM.
GORM cũng cung cấp một trình tạo SQL để xây dựng SQL thô, hữu ích cho các hoạt động không được hỗ trợ.