परिचय: क्यों Go और डेटाबेस एक आदर्श जोड़ी हैं
\nGo (Golang) एक आधुनिक कंपाइल की जाने वाली भाषा है, जिसे Google द्वारा बनाया गया है। इसके मुख्य लाभ हैं - उच्च प्रदर्शन, सरलता और अंतर्निहित समवर्ती समर्थन। जब डेटाबेस के साथ काम करने की बात आती है, तो Go किसी भी DBMS के लिए शक्तिशाली मानक लाइब्रेरी और लोकप्रिय तृतीय-पक्ष ड्राइवर प्रदान करता है।
\nइस लेख में, हम दो सबसे लोकप्रिय डेटाबेस: रिलेशनल PostgreSQL और डॉक्यूमेंट-ओरिएंटेड MongoDB से कनेक्ट होने और बुनियादी संचालन करने का तरीका समझेंगे। यह सामग्री शुरुआती डेवलपर्स के लिए है जो Go सिंटैक्स की मूल बातों से पहले से परिचित हैं।
\n\n1. वातावरण तैयार करना और ड्राइवर स्थापित करना
\nकोड लिखने से पहले, सुनिश्चित करें कि आपके पास Go (संस्करण 1.21+) स्थापित है। डेटाबेस के साथ काम करने के लिए हमें ड्राइवरों की आवश्यकता होगी। उन्हें कमांड का उपयोग करके स्थापित करें:
\ngo get github.com/lib/pq // PostgreSQL के लिए\ngo get go.mongodb.org/mongo-driver // MongoDB के लिए\nयह भी सुनिश्चित करें कि आपकी मशीन पर संबंधित डेटाबेस सर्वर चल रहे हों (स्थानीय रूप से या Docker के माध्यम से)।
\n\n1.1. प्रोजेक्ट संरचना
\nएक main.go फ़ाइल बनाएँ। सरलता के लिए सारा तर्क इसमें केंद्रित होगा। वास्तविक प्रोजेक्ट्स में कोड को पैकेजों में विभाजित करना चाहिए।
2. Go में PostgreSQL के साथ कार्य
\nPostgreSQL एक शक्तिशाली रिलेशनल DBMS है। Go में इसके साथ काम करने के लिए हम database/sql पैकेज और lib/pq ड्राइवर का उपयोग करते हैं।
2.1. डेटाबेस से कनेक्शन
\nहम एक कनेक्शन फ़ंक्शन बनाएंगे। कनेक्शन स्ट्रिंग (DSN) में होस्ट, पोर्ट, उपयोगकर्ता नाम और डेटाबेस शामिल होता है।
\npackage main\n\nimport (\n "database/sql"\n "fmt"\n "log"\n\n _ "github.com/lib/pq"\n)\n\nfunc main() {\n connStr := "host=localhost port=5432 user=postgres password=secret dbname=testdb sslmode=disable"\n db, err := sql.Open("postgres", connStr)\n if err != nil {\n log.Fatal("कनेक्शन त्रुटि:", err)\n }\n defer db.Close()\n\n // कनेक्शन की जाँच करें\n err = db.Ping()\n if err != nil {\n log.Fatal("कनेक्शन स्थापित करने में विफल:", err)\n }\n fmt.Println("PostgreSQL से सफलतापूर्वक जुड़ा!") \n}\nमहत्वपूर्ण: sql.Open वास्तविक कनेक्शन नहीं बनाता, केवल एक पूल बनाता है। वास्तविक कनेक्शन पहले अनुरोध या Ping() कॉल पर होता है।
2.2. तालिका बनाना और डेटा सम्मिलित करना
\nअब हम users तालिका बनाएंगे और कुछ रिकॉर्ड जोड़ेंगे।
// तालिका बनाना\ncreateTable := `\nCREATE TABLE IF NOT EXISTS users (\n id SERIAL PRIMARY KEY,\n name VARCHAR(100) NOT NULL,\n email VARCHAR(100) UNIQUE NOT NULL,\n age INT\n);`\n_, err = db.Exec(createTable)\nif err != nil {\n log.Fatal("तालिका बनाने में त्रुटि:", err)\n}\n\n// डेटा सम्मिलित करना\ninsert := `INSERT INTO users (name, email, age) VALUES ($1, $2, $3)`\n_, err = db.Exec(insert, "इवान पेत्रोव", "ivan@example.com", 30)\nif err != nil {\n log.Fatal("सम्मिलित करने में त्रुटि:", err)\n}\nfmt.Println("डेटा जोड़ा गया")\nप्लेसहोल्डर $1, $2 के उपयोग पर ध्यान दें - यह SQL इंजेक्शन से सुरक्षा है।
2.3. डेटा पढ़ना और अपडेट करना
\nहम एक चयन क्वेरी निष्पादित करेंगे और उपयोगकर्ता की आयु अपडेट करेंगे।
\n// डेटा पढ़ना\nrows, err := db.Query("SELECT id, name, email, age FROM users")\nif err != nil {\n log.Fatal(err)\n}\ndefer rows.Close()\n\nfor rows.Next() {\n var id int\n var name, email string\n var age int\n err := rows.Scan(&id, &name, &email, &age)\n if err != nil {\n log.Fatal(err)\n }\n fmt.Printf("ID: %d, नाम: %s, ईमेल: %s, आयु: %d\\n", id, name, email, age)\n}\n\n// अपडेट\n_, err = db.Exec("UPDATE users SET age = $1 WHERE name = $2", 31, "इवान पेत्रोव")\nif err != nil {\n log.Fatal(err)\n}\nfmt.Println("आयु अपडेट की गई")\n\n