Go के साथ मोनोरिपॉजिटरी: शुरुआती लोगों के लिए कोड संगठन

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

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

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

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

\n\n

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

\n\n

शुरुआती डेवलपर्स के लिए, मोनोरिपॉजिटरी कई प्रमुख लाभ प्रदान करता है:

\n
    \n
  • एकीकृत कोड संस्करण — सभी निर्भरताएँ सिंक्रोनाइज़ होती हैं
  • \n
  • सरलीकृत रीफैक्टरिंग — परिवर्तन तुरंत सभी प्रोजेक्ट में दिखाई देते हैं
  • \n
  • मानकीकरण — लिंटर, CI/CD और परीक्षणों की समान सेटिंग्स
  • \n
  • पारदर्शिता — सिस्टम के विभिन्न भागों के बीच संबंध को समझना आसान है
  • \n
\n\n

इस लेख में, हम बुनियादी संरचना से शुरू करके व्यावहारिक उदाहरणों तक, Go में मोनोरिपॉजिटरी को सही ढंग से व्यवस्थित करने का तरीका समझेंगे।

\n\n

Go में मोनोरिपॉजिटरी की बुनियादी संरचना

\n\n

सही कोड संगठन एक सफल मोनोरिपॉजिटरी का आधार है। आइए एक सामान्य संरचना पर विचार करें:

\n\n
my-monorepo/\n├── apps/\n│   ├── web-api/          # मुख्य एप्लिकेशन\n│   │   ├── main.go\n│   │   ├── go.mod\n│   │   └── internal/\n│   └── worker/           # बैकग्राउंड हैंडलर\n│       ├── main.go\n│       └── go.mod\n├── libs/\n│   ├── config/           # सामान्य कॉन्फ़िगरेशन\n│   │   ├── config.go\n│   │   └── go.mod\n│   └── logger/           # लॉगिंग\n│       ├── logger.go\n│       └── go.mod\n├── scripts/              # सहायक स्क्रिप्ट्स\n├── docs/                 # दस्तावेज़ीकरण\n├── go.work               # Go workspace\n└── README.md\n
\n\n

इस संरचना के प्रमुख सिद्धांत:

\n
    \n
  • apps/ — निष्पादन योग्य एप्लिकेशन (बाइनरी)
  • \n
  • libs/ — पुन: प्रयोज्य लाइब्रेरी
  • \n
  • scripts/ — ऑटोमेशन और उपयोगिताएँ
  • \n
  • docs/ — प्रोजेक्ट दस्तावेज़ीकरण
  • \n
\n\n

मोनोरिपॉजिटरी के लिए Go Workspace सेटअप करना

\n\n

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

\n\n

अपने मोनोरिपॉजिटरी के लिए एक workspace बनाएँ:

\n\n
// go.work\ngo 1.22\n\nuse (\n    ./apps/web-api\n    ./apps/worker\n    ./libs/config\n    ./libs/logger\n)\n
\n\n

go.work बनाने के बाद, use सूची के सभी मॉड्यूल एक-दूसरे के लिए स्थानीय रूप से उपलब्ध होंगे। यह विकास के दौरान विशेष रूप से सुविधाजनक है — लाइब्रेरी में परिवर्तन तुरंत एप्लिकेशन में दिखाई देते हैं।

\n\n

मॉड्यूल का आरंभीकरण

\n\n

प्रत्येक घटक के लिए अपना go.mod बनाना होगा। कॉन्फ़िगरेशन लाइब्रेरी का उदाहरण:

\n\n
// libs/config/go.mod\nmodule github.com/your-org/libs/config\n\ngo 1.22\n
\n\n

और web-api एप्लिकेशन के लिए:

\n\n
// apps/web-api/go.mod\nmodule github.com/your-org/apps/web-api\n\ngo 1.22\n\nrequire github.com/your-org/libs/config v0.0.0\n\nreplace github.com/your-org/libs/config => ../../libs/config\n
\n\n

replace पर ध्यान दें — यह Go को इंटरनेट पर खोजने के बजाय लाइब्रेरी के स्थानीय संस्करण का उपयोग करने का निर्देश देता है।

\n\n

कोड उदाहरण: लाइब्रेरी और एप्लिकेशन

\n\n

आइए कॉन्फ़िगरेशन के लिए एक सरल लाइब्रेरी और उसका उपयोग करने वाला एप्लिकेशन बनाएँ।

\n\n

लाइब्रेरी libs/config

\n\n
// libs/config/config.go\npackage config\n\nimport (\n    "fmt"\n    "os"\n)\n\ntype Config struct {\n    Port string\n    Env  string\n}\n\nfunc Load() (*Config, error) {\n    port := os.Getenv("PORT")\n    if port == "" {\n        port = "8080"\n    }\n\n    env := os.Getenv("ENV")\n    if env == "" {\n        env = "development"\n    }\n\n    return &Config{\n        Port: port,\n        Env:  env,\n    }, nil\n}\n\nfunc (c *Config) String() string {\n    return fmt.Sprintf("Config{                

ब्लॉग

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