विचार से CLI-उपयोगिता तक Go में: लिखना, संकलन, डिप्लॉय

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

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

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

CLI-उपयोगिताओं के लिए Go आदर्श भाषा क्यों है?

\n\n

कल्पना करें: आपको एक ऐसा टूल लिखना है जो कंसोल में चलेगा, फ़ाइलों को प्रोसेस करेगा, API पर जाएगा या बस रूटीन को ऑटोमेट करेगा। आप Python, Node.js या Bash चुन सकते हैं। लेकिन अगर गति, बाइनरी का आकार और वितरण में आसानी महत्वपूर्ण है — तो आपकी पसंद Go में CLI उपयोगिताएँ होनी चाहिए।

\n\n

Go एक स्थिर बाइनरी में कंपाइल होता है। कोई डिपेंडेंसी नहीं, कोई "क्या आपके पास Python 3.8 है?" नहीं। डाउनलोड किया — चलाया। यह Golang CLI टूल्स को DevOps की दुनिया में डी-फैक्टो मानक बनाता है (Docker, Kubernetes, Hugo को याद करें — ये सभी Go में लिखे गए हैं)।

\n\n

इस लेख में हम सिर्फ़ थ्योरी पर बात नहीं करेंगे। हम शुरू से एक वास्तविक Go में कंसोल उपयोगिता बनाएंगे जो JSON पार्स करेगी, HTTP के साथ काम करेगी और सुंदर टेबल प्रदर्शित करेगी। आप सीखेंगे कि प्रोजेक्ट को कैसे स्ट्रक्चर करें, एरर को कैसे हैंडल करें और किसी भी प्लेटफ़ॉर्म के लिए कंपाइल कैसे करें।

\n\n

एनवायरनमेंट सेटअप और प्रोजेक्ट स्ट्रक्चर

\n\n

कोड लिखने से पहले, सुनिश्चित करें कि आपके पास Go (वर्जन 1.21+) इंस्टॉल है। जाँच करना आसान है:

\n\n
go version
\n\n

अपने प्रोजेक्ट के लिए एक डायरेक्टरी बनाएँ। उपयोगिता का नाम json2table रखें — यह stdin या फ़ाइल से JSON पढ़ेगी और डेटा को टेबल के रूप में प्रदर्शित करेगी।

\n\n
mkdir json2table\ncd json2table\ngo mod init github.com/आपका-यूज़रनेम/json2table
\n\n

प्रोजेक्ट स्ट्रक्चर Go में डेवलपमेंट के लिए क्लासिक होगा:

\n\n
    \n
  • main.go — एंट्री पॉइंट
  • \n
  • internal/ — आंतरिक लॉजिक (पार्सिंग, आउटपुट)
  • \n
  • cmd/ — कमांड हैंडलिंग के लिए कोड (यदि Cobra का उपयोग करते हैं)
  • \n
\n\n

हम बिना फ्रेमवर्क के सरल शुरुआत करेंगे, और बाद में फ्लैग और हेल्प जोड़ेंगे।

\n\n

उपयोगिता का कोर लिखना: JSON पार्सिंग और टेबल आउटपुट

\n\n

फ़ाइल internal/parser.go बनाएँ। यहाँ हम JSON को पार्स करेंगे और इसे स्ट्रक्चर में बदलेंगे।

\n\n
package internal\n\nimport (\n    "encoding/json"\n    "fmt"\n    "io"\n)\n\n// Record एक टेबल की एक पंक्ति को दर्शाता है\ntype Record map[string]interface{}\n\n// ParseJSON reader से JSON पढ़ता है और रिकॉर्ड का स्लाइस लौटाता है\nfunc ParseJSON(r io.Reader) ([]Record, error) {\n    var data []Record\n    decoder := json.NewDecoder(r)\n    if err := decoder.Decode(&data); err != nil {\n        return nil, fmt.Errorf("JSON पार्सिंग में त्रुटि: %w", err)\n    }\n    return data, nil\n}
\n\n

अब फ़ॉर्मेटेड आउटपुट के लिए internal/table.go बनाएँ:

\n\n
package internal\n\nimport (\n    "fmt"\n    "strings"\n    "text/tabwriter"\n    "os"\n)\n\n// PrintTable रिकॉर्ड को संरेखण के साथ टेबल के रूप में प्रदर्शित करता है\nfunc PrintTable(records []Record) {\n    if len(records) == 0 {\n        fmt.Println("प्रदर्शित करने के लिए कोई डेटा नहीं")\n        return\n    }\n\n    // सभी अद्वितीय कुंजियाँ (कॉलम हेडर) इकट्ठा करें\n    headers := make([]string, 0)\n    seen := make(map[string]bool)\n    for _, rec := range records {\n        for key := range rec {\n            if !seen[key] {\n                headers = append(headers, key)\n                seen[key] = true\n            }\n        }\n    }\n\n    // सुंदर आउटपुट के लिए tabwriter का उपयोग करें\n    w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)\n\n    // हेडर\n    fmt.Fprintln(w, strings.Join(headers, "\\t"))\n\n    // सेपरेटर\n    sep := make([]string, len(headers))\n    for i, h := range headers {\n        sep[i] = strings.Repeat("-", len(h))\n    }\n    fmt.Fprintln(w, strings.Join(sep, "\\t"))\n\n    // डेटा\n    for _, rec := range records {\n        row := make([]string, len(headers))\n        for i, h := range headers {\n            if val, ok := rec[h]; ok {\n                row[i] = fmt.Sprintf("%v", val)\n            } else {\n                row[i] = ""\n            }\n        }\n        fmt.Fprintln(w, strings.Join(row, "\\t"))\n    }\n\n    w.Flush()\n}
\n\n

सब कुछ main में इकट्ठा करना।

ब्लॉग

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