Go के साथ मोनोरिपॉजिटरी: व्यवहार में कोड का संगठन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go के साथ मोनोरिपॉजिटरी: व्यवहार में कोड का संगठन

\n\n

मोनोरिपॉजिटरी (monorepo) स्रोत कोड प्रबंधन का एक दृष्टिकोण है, जिसमें सभी प्रोजेक्ट, लाइब्रेरी और सेवाएँ एक ही रिपॉजिटरी में संग्रहीत की जाती हैं। Go की दुनिया में, मॉड्यूल के अंतर्निहित समर्थन और पैकेजों की लचीली प्रणाली के कारण यह दृष्टिकोण विशेष रूप से लोकप्रिय हो गया है। इस लेख में, हम यह समझेंगे कि Go में व्यवहार में मोनोरिपॉजिटरी कैसे व्यवस्थित करें, एक विशिष्ट संरचना, कोड उदाहरण और सर्वोत्तम अभ्यासों पर विचार करेंगे।

\n\n

Go में मोनोरिपॉजिटरी की आवश्यकता क्यों है?

\n\n

मोनोरिपॉजिटरी कई प्रमुख समस्याओं का समाधान करता है:

\n
    \n
  • निर्भरता प्रबंधन को सरल बनाना — सभी आंतरिक पैकेज एक ही स्थान पर होते हैं, उन्हें अपडेट और रिफैक्टर करना आसान होता है।
  • \n
  • एकीकृत परिवर्तन इतिहास — परमाणु कमिट जो एक साथ कई सेवाओं को प्रभावित करते हैं, बिना अतिरिक्त सिंक्रनाइज़ेशन के काम करते हैं।
  • \n
  • CI/CD में तेजी — पाइपलाइनों को कॉन्फ़िगर किया जा सकता है जो प्रोजेक्ट के केवल बदले हुए भागों को बनाती हैं।
  • \n
  • कोड गुणवत्ता में सुधार — एकीकृत मानकों, लिंटर्स और कोड-रिव्यू को लागू करना आसान है।
  • \n
\n\n

Go मोनोरिपॉजिटरी की संरचना: मूल योजना

\n\n

Go पर एक विशिष्ट मोनोरिपॉजिटरी संरचना पर विचार करें। उदाहरण के लिए, दो माइक्रोसर्विसेज (api और worker) और एक सामान्य लाइब्रेरी lib वाला प्रोजेक्ट लेते हैं:

\n\n
my-monorepo/\n├── go.work\n├── go.work.sum\n├── apps/\n│   ├── api/\n│   │   ├── go.mod\n│   │   ├── main.go\n│   │   └── handler.go\n│   └── worker/\n│       ├── go.mod\n│       ├── main.go\n│       └── process.go\n├── lib/\n│   ├── go.mod\n│   ├── auth/\n│   │   └── auth.go\n│   └── db/\n│       └── db.go\n├── scripts/\n│   ├── build.sh\n│   └── test.sh\n└── Makefile
\n\n

मुख्य तत्व:

\n
    \n
  • go.work — Go Workspace फ़ाइल, जो सभी मॉड्यूल को जोड़ती है।
  • \n
  • apps/ — एप्लिकेशन (माइक्रोसर्विसेज, CLI उपयोगिताएँ आदि) वाली निर्देशिका।
  • \n
  • lib/ — सामान्य लाइब्रेरीज़ जो सभी एप्लिकेशन द्वारा उपयोग की जाती हैं।
  • \n
  • scripts/ — बिल्ड, टेस्ट और डिप्लॉय के लिए सहायक स्क्रिप्ट।
  • \n
\n\n

Go Workspace (go.work) सेटअप करना

\n\n

Go 1.18+ workspace तंत्र प्रदान करता है, जो एक साथ कई मॉड्यूल के साथ काम करने की अनुमति देता है। रूट में go.work फ़ाइल बनाएँ:

\n\n
go 1.22\n\nuse (\n    ./apps/api\n    ./apps/worker\n    ./lib\n)
\n\n

अब डेवलपमेंट के दौरान, आप प्रोजेक्ट के रूट से कमांड चला सकते हैं, और Go सभी मॉड्यूल को एक इकाई के रूप में देखेगा। उदाहरण के लिए, सभी मॉड्यूल के लिए टेस्ट चलाने के लिए:

\n\n
go test ./...
\n\n

और किसी विशिष्ट सेवा को बनाने के लिए:

\n\n
cd apps/api && go build -o bin/api .
\n\n

कोड उदाहरण: सामान्य लाइब्रेरी और माइक्रोसर्विस

\n\n

lib/auth/auth.go में प्रमाणीकरण के लिए एक सरल लाइब्रेरी बनाएँ:

\n\n
package auth\n\nimport "errors"\n\nvar (\n    ErrInvalidToken = errors.New("invalid token")\n)\n\n// ValidateToken टोकन की जाँच करता है और उपयोगकर्ता ID लौटाता है।\nfunc ValidateToken(token string) (string, error) {\n    if token == "" {\n        return "", ErrInvalidToken\n    }\n    // यहाँ वास्तविक JWT जाँच या बाहरी सेवा कॉल हो सकती है\n    return "user-123", nil\n}
\n\n

अब इस लाइब्रेरी का उपयोग माइक्रोसर्विस apps/api/handler.go में करें:

\n\n
package main\n\nimport (\n    "encoding/json"\n    "net/http"\n    "my-monorepo/lib/auth"\n)\n\ntype UserResponse struct {\n    UserID string `json:"user_id"`\n}\n\nfunc UserHandler(w http.ResponseWriter, r *http.Request) {\n    token := r.Header.Get("Authorization")\n    userID, err := auth.ValidateToken(token)\n    if err != nil {\n        http.Error(w, "Unauthorized", http.StatusUnauthorized)\n        return\n    }\n\n    resp := UserResponse{UserID: user                

ब्लॉग

पुस्तक अनुशंसाएँ