परिचय: क्यों Go और डेटाबेस एक आदर्श जोड़ी हैं
\n\nप्रोग्रामिंग भाषा Go (Golang) ने उच्च प्रदर्शन, अंतर्निहित समवर्ती समर्थन और तैनाती में सरलता के कारण लोकप्रियता हासिल की है। हालांकि, Go की वास्तविक शक्ति डेटाबेस के साथ काम करने पर प्रकट होती है। चाहे वह रिलेशनल PostgreSQL हो या दस्तावेज़-उन्मुख MongoDB, Go डेटा के साथ कुशलतापूर्वक बातचीत करने के लिए सुरुचिपूर्ण उपकरण प्रदान करता है।
\n\nइस लेख में, हम Go में PostgreSQL और MongoDB से कनेक्शन, CRUD संचालन करने और क्वेरी अनुकूलन के व्यावहारिक पहलुओं पर चर्चा करेंगे। आप सीखेंगे कि मानक पैकेज और लोकप्रिय ड्राइवरों का उपयोग करके विश्वसनीय और तेज़ कोड कैसे लिखें।
\n\n1. Go में PostgreSQL के साथ कार्य
\n\nGo में PostgreSQL के साथ काम करने के लिए मानक पैकेज database/sql का उपयोग pgx या lib/pq ड्राइवर के साथ किया जाता है। बेहतर प्रदर्शन और PostgreSQL की उन्नत क्षमताओं के समर्थन के कारण pgx की सिफारिश की जाती है।
1.1. स्थापना और कनेक्शन
\n\ngo modules के माध्यम से ड्राइवर स्थापित करें:
\n\ngo get github.com/jackc/pgx/v5\n\nडेटाबेस से कनेक्शन का उदाहरण:
\n\npackage main\n\nimport (\n "context"\n "fmt"\n "github.com/jackc/pgx/v5/pgxpool"\n "log"\n)\n\nfunc main() {\n dsn := "postgres://user:password@localhost:5432/mydb?sslmode=disable"\n pool, err := pgxpool.New(context.Background(), dsn)\n if err != nil {\n log.Fatal("Unable to connect to database:", err)\n }\n defer pool.Close()\n\n fmt.Println("Connected to PostgreSQL!")\n}\n\nसुझाव: उत्पादन वातावरण के लिए कनेक्शन पूल (pgxpool) का उपयोग करें — इससे नए कनेक्शन स्थापित करने का ओवरहेड कम होता है।
1.2. CRUD संचालन
\n\nusers तालिका के उदाहरण पर बुनियादी संचालन देखें:
// CREATE\nfunc createUser(pool *pgxpool.Pool, name string, email string) (int, error) {\n var id int\n err := pool.QueryRow(context.Background(),\n "INSERT INTO users (name, email) VALUES ($1, $2) RETURNING id",\n name, email).Scan(&id)\n if err != nil {\n return 0, err\n }\n return id, nil\n}\n\n// READ\nfunc getUser(pool *pgxpool.Pool, id int) (string, string, error) {\n var name, email string\n err := pool.QueryRow(context.Background(),\n "SELECT name, email FROM users WHERE id = $1", id).Scan(&name, &email)\n if err != nil {\n return "", "", err\n }\n return name, email, nil\n}\n\n// UPDATE\nfunc updateUserEmail(pool *pgxpool.Pool, id int, newEmail string) error {\n _, err := pool.Exec(context.Background(),\n "UPDATE users SET email = $1 WHERE id = $2", newEmail, id)\n return err\n}\n\n// DELETE\nfunc deleteUser(pool *pgxpool.Pool, id int) error {\n _, err := pool.Exec(context.Background(),\n "DELETE FROM users WHERE id = $1", id)\n return err\n}\n\n$1, $2 के साथ पैरामीटरयुक्त क्वेरी के उपयोग पर ध्यान दें — यह SQL इंजेक्शन से बचाता है।
1.3. लेन-देन (ट्रांजेक्शन)
\n\nPostgreSQL लेन-देन का समर्थन करता है, जो डेटा अखंडता के लिए महत्वपूर्ण है:
\n\nfunc transferMoney(pool *pgxpool.Pool, fromID, toID int, amount float64) error {\n tx, err := pool.Begin(context.Background())\n if err != nil {\n return err\n }\n defer tx.Rollback(context.Background()) // त्रुटि पर वापसी\n\n _, err = tx.Exec(context.Background(),\n "UPDATE accounts SET balance = balance - $1 WHERE id = $2", amount, fromID)\n if err != nil {\n return err\n }\n\n _, err = tx.Exec(context.Background(),\n "UPDATE accounts SET balance = balance + $1 WHERE id = $2", amount, toID)\n if err != nil {\n return err\n }\n\n return tx.Commit(context.Background())\n}\n\n2. Go में MongoDB के साथ कार्य
\n\nMongoDB — दस्तावेज़