Go माइक्रोसर्विसेज़ के लिए सबसे अच्छा विकल्प क्यों है (और कब ऐसा नहीं है)
\n\nकल्पना करें कि आप एक शॉपिंग मॉल बना रहे हैं। एक विशाल इमारत बनाने के बजाय, आप अलग-अलग पवेलियन बनाते हैं: एक कॉफी शॉप, एक किताबों की दुकान, एक किराना स्टोर। प्रत्येक अपने आप काम करता है, लेकिन साथ मिलकर वे एक एकल परिसर बनाते हैं। कहीं लिफ्ट खराब हो गई? किताबों की दुकान काम करती रहती है। कॉफी शॉप में कप खत्म हो गए? हम केवल उसे बंद करते हैं, पूरे परिसर को नहीं।
\n\nयह माइक्रोसर्विसेज़ आर्किटेक्चर है। और Go (Golang) ऐसे 'पवेलियन' बनाने के लिए एक आदर्श सामग्री है। क्यों?
\n\n- \n
- त्वरित शुरुआत: एक बाइनरी में संकलन। कोई JDK, वर्चुअल मशीन या node_modules नहीं। \n
- प्रदर्शन: Go C++ के स्तर पर काम करता है, लेकिन Python की तरह लिखा जाता है। \n
- अंतर्निहित समवर्तीता: गोरूटीन (goroutines) और चैनल (channels) प्रति सेकंड सैकड़ों अनुरोधों को संभालने के लिए एक सुपरपावर हैं। \n
- सरलता: Go जानबूझकर सीमित है। कोई जेनेरिक (Go 1.18 से पहले नहीं थे), कोई इनहेरिटेंस नहीं। कोड वैक्यूम क्लीनर के निर्देशों की तरह पढ़ा जाता है - यह तुरंत स्पष्ट होता है कि प्रत्येक पंक्ति क्या करती है। \n
लेकिन नुकसान भी हैं। Go उपयुक्त नहीं होगा यदि आपको चाहिए:\n
- \n
- भारी क्लास इनहेरिटेंस (यहाँ यह बिल्कुल नहीं है)। \n
- किसी भी कार्य के लिए तैयार लाइब्रेरीज़ की एक विशाल संख्या (पारिस्थितिकी तंत्र Java या Python की तुलना में गरीब है)। \n
- डायनेमिक टाइपिंग (Go सख्ती से टाइप किया गया है, आपको अधिक boilerplate लिखना होगा)। \n
यदि आपका प्रोजेक्ट एक उच्च-लोड API, चैट के लिए बैकएंड, भुगतान गेटवे या मॉनिटरिंग सिस्टम है - Go आपकी पसंद है। यदि आप एक सप्ताहांत में एक प्रोटोटाइप लिख रहे हैं और गति की परवाह नहीं करते - Python लें।
\n\nचरण 1. सामान पैक करें: उपकरण और प्रोजेक्ट संरचना
\n\nक्या स्थापित करने की आवश्यकता है
\nकोड लिखने से पहले, आइए वातावरण सेट करें। आपको आवश्यकता होगी:
\n- \n
- Go (संस्करण 1.21+)।
go.devसे डाउनलोड करें। \n - Docker (कंटेनरीकरण के लिए)। \n
- curl या Postman (API परीक्षण के लिए)। \n
- कोई भी IDE: GoLand, Go प्लगइन के साथ VS Code, Vim। मैं VS Code की सलाह देता हूँ - मुफ्त और सुविधाजनक। \n
सही फ़ोल्डर संरचना
\nआइए तुरंत सहमत हों: कोई लापरवाही नहीं। Go में माइक्रोसर्विस के लिए यहाँ मानक संरचना है:
\n\n/user-service\n├── cmd/\n│ └── server/\n│ └── main.go # प्रवेश बिंदु\n├── internal/\n│ ├── handler/ # HTTP हैंडलर\n│ ├── service/ # व्यावसायिक तर्क\n│ ├── repository/ # डेटाबेस के साथ काम\n│ └── model/ # डेटा संरचनाएँ\n├── pkg/\n│ └── middleware/ # सामान्य उपयोगिताएँ\n├── Dockerfile\n├── go.mod\n└── go.sum\n\n\nऐसा क्यों? Go एक ऐसी भाषा है जहाँ फ़ोल्डर संरचना आर्किटेक्चर को निर्धारित करती है। cmd/ - प्रवेश बिंदु। internal/ - वह सब कुछ जो बाहर से आयात नहीं किया जा सकता (मूर्खता से सुरक्षा)। pkg/ - वह जो अन्य सेवाओं के साथ साझा किया जा सकता है।
चरण 2. पहला माइक्रोसर्विस लिखें: Hello, World! 2.0
\n\nआइए Go में एक सरल HTTP सर्वर लिखें जो JSON लौटाएगा। यह हमारा 'अभिवादन माइक्रोसर्विस' होगा।
\n\nचरण 1. मॉड्यूल आरंभीकरण
\nmkdir hello-service\ncd hello-service\ngo mod init github.com/आपका-उपयोगकर्ता-नाम/hello-service\n\nचरण 2. main.go लिखें
\npackage main\n\nimport (\n "encoding/json"\n "log"\n "net/http"\n "time"\n)\n\n// GreetingResponse — प्रतिक्रिया संरचना\ntype GreetingResponse struct {\n Message string `json:"message"`\n Timestamp string `json:"timestamp"`\n}\n\nfunc greetHandler(w http.ResponseWriter, r *http.Request) {\n // हेडर सेट करें\n w.Header().Set("Content-Type", "application/json")\n w.WriteHeader(http.StatusOK)\n\n // प्रतिक्रिया बनाएँ\n response := GreetingResponse{\n Message: "नमस्ते, माइक्रोसर्विसेज़!",\n