Go के लिए cobra/pflag लाइब्रेरी: शक्तिशाली कमांड लाइन फ्लैग
Go में डेवलपमेंट की दुनिया में, उपयोगकर्ता के अनुकूल और लचीले कमांड लाइन इंटरफेस (CLI) बनाना एक महत्वपूर्ण कार्य है। स्टैंडर्ड flag लाइब्रेरी बुनियादी फ्लैग पार्सिंग की सुविधा देती है, लेकिन इसकी क्षमताएं सीमित हैं। यहाँ cobra/pflag मदद करता है — यह एक शक्तिशाली लाइब्रेरी है जो स्टैंडर्ड पैकेज की क्षमताओं को बढ़ाती है और Cobra (CLI ऐप बनाने के लिए लोकप्रिय फ्रेमवर्क) इकोसिस्टम का एक अभिन्न हिस्सा है।
pflag का स्टैंडर्ड flag पर मुख्य लाभ यह है कि यह POSIX/GNU (डबल डैश के साथ लंबे फ्लैग, जैसे --verbose) और BSD (सिंगल डैश के साथ छोटे फ्लैग, जैसे -v) दोनों फ्लैग स्टाइल को सपोर्ट करता है। यह लाइब्रेरी शॉर्ट फ्लैग को जोड़ने (-abc बजाय -a -b -c), अनिवार्य आर्गुमेंट वाले फ्लैग, काउंटर फ्लैग और बहुत कुछ सपोर्ट करती है। pflag पूरी तरह से flag.Value इंटरफेस के साथ संगत है, जिससे मौजूदा कोड को आसानी से माइग्रेट किया जा सकता है।
इस लाइब्रेरी का उपयोग Kubernetes, Helm, Hugo जैसे प्रसिद्ध प्रोजेक्ट्स में सक्रिय रूप से किया जाता है। यदि आप Go में एक गंभीर CLI ऐप बनाने की योजना बना रहे हैं, तो pflag एक अपरिहार्य उपकरण होगा, जो लचीलापन, प्रदर्शन और आधुनिक कमांड लाइन मानकों का अनुपालन प्रदान करता है।
इंस्टॉलेशन
लाइब्रेरी को इंस्टॉल करना Go के मानक तरीके से पैकेज मैनेजर go get के माध्यम से किया जाता है:
go get github.com/spf13/pflag
इस कमांड को चलाने के बाद, लाइब्रेरी आपके Go मॉड्यूल (go.mod फ़ाइल) में जुड़ जाएगी। अब आप इसे अपने कोड में इम्पोर्ट कर सकते हैं:
import "github.com/spf13/pflag"
त्वरित शुरुआत
चलिए एक सरल एप्लिकेशन बनाते हैं जो उपयोगकर्ता का नाम और ग्रीटिंग दिखाने का फ्लैग लेता है:
package main
import (
"fmt"
"github.com/spf13/pflag"
)
func main() {
// फ्लैग परिभाषित करें
name := pflag.String("name", "World", "नमस्ते के लिए नाम")
verbose := pflag.BoolP("verbose", "v", false, "विस्तृत आउटपुट")
// फ्लैग पार्स करें
pflag.Parse()
// मानों का उपयोग करें
if *verbose {
fmt.Printf("मोड: विस्तृत\n")
fmt.Printf("नाम: %s\n", *name)
}
fmt.Printf("नमस्ते, %s!\n", *name)
}
प्रोग्राम को विभिन्न फ्लैग के साथ चलाएं:
go run main.go
go run main.go --name=Go
go run main.go -n Go -v
go run main.go --verbose --name "Go Developer"
मुख्य तरीके और फंक्शन
1. pflag.String(name, shorthand, value, usage)
सिग्नेचर: func String(name string, shorthand string, value string, usage string) *string
निर्दिष्ट नाम, शॉर्ट फॉर्म, डिफ़ॉल्ट मान और विवरण के साथ एक स्ट्रिंग टाइप का फ्लैग बनाता है। स्ट्रिंग का पॉइंटर लौटाता है।
host := pflag.StringP("host", "H", "localhost", "सर्वर का पता")
pflag.Parse()
fmt.Printf("%s से कनेक्ट हो रहे हैं\n", *host)
2. pflag.Int(name, shorthand, value, usage)
सिग्नेचर: func Int(name string, shorthand string, value int, usage string) *int
पूर्णांक टाइप का फ्लैग बनाता है। पोर्ट, सीमाएं और अन्य संख्यात्मक पैरामीटर निर्दिष्ट करने के लिए उपयोगी।
port := pflag.IntP("port", "p", 8080, "सुनने के लिए पोर्ट")
pflag.Parse()
fmt.Printf("सर्वर पोर्ट %d पर चल रहा है\n", *port)
3. pflag.Bool(name, shorthand, value, usage)
सिग्नेचर: func Bool(name string, shorthand string, value bool, usage string) *bool
बूलियन टाइप का फ्लैग बनाता है। ये टॉगल फ्लैग होते हैं जिन्हें मान की आवश्यकता नहीं होती (सिर्फ उपस्थिति से काम चलता है)।
debug := pflag.BoolP("debug", "d", false, "डीबग मोड सक्षम करें")
pflag.Parse()
if *debug {
fmt.Println("डीबग मोड चालू है")
}
4. pflag.Parse()
सिग्नेचर: func Parse()
यह फंक्शन कमांड लाइन से सभी परिभाषित फ्लैग को पार्स करता है। इसे सभी फ्लैग परिभाषित करने के बाद कॉल करना चाहिए। यह os.Args[1:] से तर्क पढ़ता है।
pflag.Parse()
// अब सभी फ्लैग वेरिएबल में मान उपलब्ध हैं
5. pflag.Lookup(name string)
सिग्नेचर: func Lookup(name string) *Flag
किसी फ्लैग को उसके नाम से खोजने और उसकी जानकारी प्राप्त करने की अनुमति देता है।
flag := pflag.Lookup("verbose")
if flag != nil {
fmt.Printf("फ्लैग '%s' का डिफ़ॉल्ट मान: %v\n", flag.Name, flag.DefValue)
}
निष्कर्ष
cobra/pflag Go डेवलपर्स के लिए एक शक्तिशाली और लचीला उपकरण है जो पेशेवर CLI एप्लिकेशन बनाने में मदद करता है। इसकी POSIX/GNU और BSD फ्लैग स्टाइल के लिए समर्थन, साथ ही Cobra फ्रेमवर्क के साथ एकीकरण, इसे Go इकोसिस्टम में एक आवश्यक लाइब्रेरी बनाता है। चाहे आप एक छोटा टूल बना रहे हों या एक बड़ा एंटरप्राइज एप्लिकेशन, pflag आपकी CLI जरूरतों को पूरा करेगा।