Go में डेटाबेस के साथ काम करना: PostgreSQL और MongoDB
Go (Golang) एक आधुनिक कंपाइल की जाने वाली भाषा है जो उच्च-लोड वाली बैकएंड सेवाएँ बनाने के लिए आदर्श है। किसी भी बैकएंड के प्रमुख कार्यों में से एक डेटाबेस के साथ काम करना है। इस लेख में, हम विस्तार से समझेंगे कि दो सबसे लोकप्रिय DBMS: रिलेशनल PostgreSQL और डॉक्यूमेंट-ओरिएंटेड MongoDB से कैसे कनेक्ट करें और CRUD ऑपरेशन करें। आपको तैयार कोड उदाहरण, best practices और क्वेरी ऑप्टिमाइज़ेशन के सुझाव मिलेंगे।
1. वातावरण तैयार करना और ड्राइवर स्थापित करना
शुरू करने से पहले सुनिश्चित करें कि आपके पास Go संस्करण 1.19 या उच्चतर स्थापित है। डेटाबेस के साथ काम करने के लिए हमें दो मुख्य पैकेजों की आवश्यकता होगी:
- database/sql — SQL डेटाबेस के साथ काम करने के लिए मानक Go पैकेज (सामान्य इंटरफ़ेस);
- lib/pq — PostgreSQL के लिए ड्राइवर;
- go.mongodb.org/mongo-driver — आधिकारिक MongoDB ड्राइवर।
go get के माध्यम से ड्राइवर स्थापित करना:
go get github.com/lib/pqgo get go.mongodb.org/mongo-driver/mongoअपने प्रोजेक्ट का एक नया मॉड्यूल बनाएँ:
mkdir go-db-examplecd go-db-examplego mod init go-db-example2. Go में PostgreSQL के साथ काम करना
PostgreSQL एक शक्तिशाली ऑब्जेक्ट-रिलेशनल DBMS है। Go में इसके साथ काम database/sql इंटरफ़ेस के माध्यम से किया जाता है।
2.1 डेटाबेस से कनेक्शन
एक फ़ाइल main.go बनाएँ और स्थानीय Postgres डेटाबेस से कनेक्शन लिखें:
package main
import ( "database/sql" "fmt" "log"
_ "github.com/lib/pq")
func main() { // कनेक्शन स्ट्रिंग: user password dbname sslmode connStr := "user=postgres password=mysecretpassword dbname=testdb sslmode=disable" db, err := sql.Open("postgres", connStr) if err != nil { log.Fatal("कनेक्शन त्रुटि:", err) } defer db.Close()
// कनेक्शन की जाँच करें err = db.Ping() if err != nil { log.Fatal("डेटाबेस से कनेक्ट नहीं हो सका:", err) } fmt.Println("PostgreSQL से सफलतापूर्वक कनेक्ट हुआ!")}2.2 तालिका बनाना और डेटा सम्मिलित करना
कनेक्शन के बाद, users तालिका बनाएँ और कुछ रिकॉर्ड सम्मिलित करें:
// तालिका बनानाcreateTable := `CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, age INT);`
_, err = db.Exec(createTable)if err != nil { log.Fatal("तालिका बनाने में त्रुटि:", err)}
// डेटा सम्मिलित करनाinsert := `INSERT INTO users (name, email, age) VALUES ($1, $2, $3)`_, err = db.Exec(insert, "अन्ना पेट्रोवा", "anna@example.com", 28)if err != nil { log.Fatal("सम्मिलित करने में त्रुटि:", err)}fmt.Println("डेटा जोड़ा गया")2.3 डेटा पढ़ना (SELECT)
एक रिकॉर्ड के लिए QueryRow और कई रिकॉर्ड के लिए Query का उपयोग करें:
// एक रिकॉर्ड प्राप्त करनाvar id intvar name, email stringvar age sql.NullInt64
row := db.QueryRow("SELECT id, name, email, age FROM users WHERE email = $1", "anna@example.com")err = row.Scan(&id, &name, &email, &age)if err != nil { log.Fatal("स्कैनिंग त्रुटि:", err)}fmt.Printf("ID: %d, नाम: %s, ईमेल: %s, आयु: %v", id, name, email, age)
// सभी रिकॉर्ड प्राप्त करनाrows, err := db.Query("SELECT id, name, email FROM users ORDER BY id")if err != nil { log.Fatal("क्वेरी त्रुटि:", err)}defer rows.Close()
for rows.Next() { err := rows.Scan(&id, &name, &email) if err != nil { log.Fatal("पंक्ति पढ़ने में त्रुटि:", err) } fmt.Printf("उपयोगकर्ता: %d | %s | %s", id, name, email)}महत्वपूर्ण: NULL मानों पर पैनिक से बचने के लिए nullable फ़ील्ड के लिए हमेशा sql.NullInt64 का उपयोग करें।