Go डेवलपर के जीवन का एक दिन: कोड, माइक्रोसर्विसेज़ और प्रोडक्शन में शांति

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

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

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

परिचय: Go प्रोग्रामर के मिथक और वास्तविकता

\n\n

IT समुदाय में Go डेवलपर के काम के बारे में दो विपरीत राय हैं। कुछ कहते हैं कि यह पूर्णतावादियों के लिए स्वर्ग है: सख्त टाइपिंग, क्लास इनहेरिटेंस की अनुपस्थिति और बिजली की तेज़ कंपाइलेशन। दूसरे कहते हैं कि यह अंतहीन if err != nil और जेनेरिक्स (हालाँकि उन्हें पहले ही जोड़ा जा चुका है) से संघर्ष है।

\n\n

सच्चाई कहाँ है? एक मध्यम आकार की कंपनी में जो उच्च-लोड वाले माइक्रोसर्विसेज़ लिखती है, वहाँ Go डेवलपर का कार्य दिवस वास्तव में कैसे बीतता है? आज मैं अपनी वास्तविकता का दरवाज़ा खोलूँगा। कोई बकवास नहीं - केवल कोड, टूल्स और वास्तविक मामले।

\n\n

मैं एक प्रोडक्ट कंपनी में काम करता हूँ, जहाँ Golang बैकएंड की मुख्य भाषा है। हमारा स्टैक: gRPC, PostgreSQL, Kafka, Kubernetes। आधुनिक Go में विकास के लिए एक सामान्य कहानी। चलिए शुरू करते हैं।

\n\n

08:30 — सुबह: योजना और कोड-रिव्यू

\n\n

दिन की शुरुआत कॉफी से नहीं, बल्कि GitLab और Slack में सूचनाएँ देखने से होती है। जब दिमाग ताज़ा होता है, तो सहकर्मियों के Merge Requests की जाँच करने का सबसे अच्छा समय होता है।

\n\n

सुबह की दिनचर्या: मैं सबसे पहले क्या देखता हूँ?

\n
    \n
  • CI/CD में त्रुटियाँ — अगर रात में बिल्ड फेल हुआ, तो यह पहला काम है।
  • \n
  • मेरे कोड पर टिप्पणियाँ — Go में विस्तृत रिव्यू करने का रिवाज है।
  • \n
  • मॉनिटरिंग ग्राफ़ — क्या कल के डिप्लॉय के बाद latency बढ़ गई है?
  • \n
\n\n

वैसे, कोड-रिव्यू के बारे में। Go समुदाय में एक अनकहा नियम है: कोड सरल होना चाहिए। यदि आप एक जटिल 'वेलोसिपेड' लिखते हैं, तो आपको रिव्यू में रोक दिया जाएगा। एक सीनियर की विशिष्ट टिप्पणी का उदाहरण:

\n\n
// बुरा: अत्यधिक एब्स्ट्रैक्शन\ntype Processor interface {\n    Process(ctx context.Context, data []byte) ([]byte, error)\n}\n\n// अच्छा: बस एक फंक्शन\nfunc Process(ctx context.Context, data []byte) ([]byte, error) {\n    // लॉजिक\n}\n
\n\n

09:00 बजे — दैनिक स्टैंडअप। हम लंबी कहानियों पर समय बर्बाद नहीं करते। प्रारूप: कल क्या किया, आज क्या करूँगा, क्या कोई बाधाएँ हैं। कोई 'आपकी शाम कैसी गुज़री' नहीं।

\n\n

09:30 — कोड में गोता: Go में माइक्रोसर्विस लिखना

\n\n

आज की योजना — नोटिफिकेशन सर्विस में सुधार करना है। यह एक क्लासिक Go माइक्रोसर्विस है जो Kafka से इवेंट लेती है और ईमेल/पुश भेजती है। कार्य: टेम्पलेट्स के लिए समर्थन जोड़ना।

\n\n

सबसे पहले मैं प्रोजेक्ट की संरचना खोलता हूँ। Go में न्यूनतम फ़ोल्डर ट्री अपनाया जाता है:

\n\n
notifier/\n├── cmd/\n│   └── server/\n│       └── main.go\n├── internal/\n│   ├── handler/\n│   ├── service/\n│   └── repository/\n├── pkg/\n│   └── models/\n└── go.mod\n
\n\n

मैं डेटा मॉडल से शुरू करता हूँ। Go में DB के साथ काम करने के लिए अक्सर Go ORM (जैसे GORM) या sqlx के माध्यम से शुद्ध SQL क्वेरी का उपयोग किया जाता है। मैं sqlx पसंद करता हूँ — कम जादू, अधिक नियंत्रण।

\n\n
type Template struct {\n    ID      int64  `db:"id"`\n    Name    string `db:"name"`\n    Content string `db:"content"`\n    CreatedAt time.Time `db:"created_at"`\n}\n\nfunc (r *Repository) GetTemplateByName(ctx context.Context, name string) (*Template, error) {\n    var t Template\n    err := r.db.GetContext(ctx, &t, "SELECT * FROM templates WHERE name = $1", name)\n    if err != nil {\n        return nil, fmt.Errorf("get template: %w", err)\n    }\n    return &t, nil\n}\n
\n\n

त्रुटि प्रबंधन पर ध्यान दें। Golang में try-catch नहीं है। प्रत्येक फंक्शन कॉल की त्रुटि के लिए जाँच की जाती है। यह बग नहीं, बल्कि एक विशेषता है — कोड पूर्वानुमानित हो जाता है। 5 साल के काम में मैंने प्रोडक्शन में कभी अप्रत्याशित null pointer नहीं पकड़ा।

\n\n

11:00 — gRPC के साथ एकीकरण

\n\n

अगला चरण — एडमिन पैनल के लिए gRPC एंडपॉइंट जोड़ना। आधुनिक Go में विकास में, gRPC आंतरिक सेवाओं के लिए मानक बन गया है। यह REST से तेज़ है और स्वचालित रूप से क्लाइंट जनरेट करता है।

\n\n

पहले मैं proto-फ़ाइल का वर्णन करता हूँ:

\n\n
syntax = "proto3";\n\npackage notifier;\n\nservice TemplateService {\n    rpc CreateTemplate (CreateTemplateRequest) returns (TemplateResponse);\                

ब्लॉग

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