PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để xử lý việc mở / đóng kết nối Db trong ứng dụng Go?

Việc mở kết nối db mỗi khi cần thiết sẽ gây lãng phí tài nguyên và nó rất chậm.

Thay vào đó, bạn nên tạo một sql.DB một lần, khi ứng dụng của bạn khởi động (hoặc theo yêu cầu đầu tiên) và chuyển nó vào nơi cần thiết (ví dụ:dưới dạng một tham số hàm hoặc thông qua một số ngữ cảnh) hoặc chỉ cần đặt nó trở thành một biến toàn cục và để mọi người có thể truy cập nó. Thật an toàn khi gọi từ nhiều goroutines.

Trích dẫn từ tài liệu của sql.Open() :

DB trả về là an toàn để sử dụng đồng thời bởi nhiều goroutines và duy trì nhóm kết nối nhàn rỗi của riêng nó. Do đó, hàm Open chỉ nên được gọi một lần. Ít khi cần thiết phải đóng một DB.

Bạn có thể sử dụng một gói init() hàm để khởi tạo nó:

var db *sql.DB

func init() {
    var err error
    db, err = sql.Open("yourdriver", "yourDs")
    if err != nil {
        log.Fatal("Invalid DB config:", err)
    }
}

Một điều cần lưu ý ở đây là sql.Open() có thể không tạo ra một kết nối thực sự với DB của bạn, nó có thể chỉ xác thực các đối số của nó. Để kiểm tra xem bạn có thể thực sự kết nối với db hay không, hãy sử dụng DB.Ping() , ví dụ:

func init() {
    var err error
    db, err = sql.Open("yourdriver", "yourDs")
    if err != nil {
        log.Fatal("Invalid DB config:", err)
    }
    if err = db.Ping(); err != nil {
        log.Fatal("DB unreachable:", err)
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các hàm toán học PostgreSQL

  2. Làm cách nào để thêm cột không cho phép null trong cơ sở dữ liệu Postgresql?

  3. Làm cách nào để kết hợp cả ngày với trường ngày giờ?

  4. Ràng buộc NOT NULL trên một tập hợp các cột

  5. Hội thảo trên web:Ngân hàng trên Postgres - Cân nhắc Ứng dụng Tài chính [Theo dõi]