Go के लिए CLI फ्रेमवर्क: सरल उपयोगिताओं से TUI इंटरफेस तक
\n\nGo (Golang) कंसोल उपयोगिताओं और DevOps टूल बनाने के लिए पहली पसंद बन गया है। तेज़ कंपाइलेशन, अंतर्निहित समवर्ती समर्थन और सरल वितरण (एक बाइनरी फ़ाइल) के कारण, Go CLI के लिए आदर्श है। हालांकि, शुरू से आर्गुमेंट पार्सर, एरर हैंडलिंग और रंगीन आउटपुट लिखना एक कठिन काम है। CLI फ्रेमवर्क मदद के लिए आते हैं। इस लेख में, हम तीन प्रमुख टूल्स पर चर्चा करेंगे: Cobra, urfave/cli और Bubble Tea।
\n\n1. Cobra — उद्योग का मानक
\n\nCobra (github.com/spf13/cobra) Go के लिए सबसे लोकप्रिय फ्रेमवर्क है। इसका उपयोग Kubernetes, Hugo, Docker, GitHub CLI द्वारा किया जाता है। Cobra एक शक्तिशाली कमांड जनरेटर, नेस्टेड सबकमांड, bash/zsh/fish के लिए ऑटो-कम्प्लीशन और Viper (कॉन्फ़िग प्रबंधन) के साथ एकीकरण प्रदान करता है।
\n\nस्थापना
\ngo get -u github.com/spf13/cobra/cobra\n\nउदाहरण: सबकमांड के साथ सरल एप्लिकेशन
\npackage main\n\nimport (\n "fmt"\n "github.com/spf13/cobra"\n)\n\nfunc main() {\n var rootCmd = &cobra.Command{\n Use: "app",\n Short: "Cobra पर एप्लिकेशन का उदाहरण",\n Run: func(cmd *cobra.Command, args []string) {\n fmt.Println("रूट हैंडलर चालू हुआ")\n },\n }\n\n var helloCmd = &cobra.Command{\n Use: "hello [name]",\n Short: "उपयोगकर्ता का अभिवादन",\n Args: cobra.MinimumNArgs(1),\n Run: func(cmd *cobra.Command, args []string) {\n fmt.Printf("नमस्ते, %s!\\n", args[0])\n },\n }\n\n rootCmd.AddCommand(helloCmd)\n rootCmd.Execute()\n}\n\nप्रमुख विशेषताएं:
\n- \n
- स्वचालित सहायता पीढ़ी (--help) \n
- फ़्लैग्स का समर्थन (लगातार, स्थानीय) \n
- आर्गुमेंट्स का सत्यापन \n
- ऑटो-कम्प्लीशन स्क्रिप्ट का निर्माण \n
- कॉन्फ़िगरेशन के लिए Viper के साथ एकीकरण \n
2. Urfave/cli — सरलता और लचीलापन
\n\nUrfave/cli (github.com/urfave/cli/v2) Cobra का एक हल्का विकल्प है। फ्रेमवर्क घोषणात्मक है: आप कमांड, फ़्लैग्स और क्रियाओं को स्ट्रक्चर में वर्णित करते हैं। छोटी और मध्यम उपयोगिताओं के लिए आदर्श।
\n\nस्थापना
\ngo get github.com/urfave/cli/v2\n\nउदाहरण: फ़ाइलों के साथ काम करने की उपयोगिता
\npackage main\n\nimport (\n "fmt"\n "log"\n "os"\n "github.com/urfave/cli/v2"\n)\n\nfunc main() {\n app := &cli.App{\n Name: "fileutil",\n Usage: "फ़ाइलों के साथ काम करने की उपयोगिता",\n Commands: []*cli.Command{\n {\n Name: "read",\n Aliases: []string{"r"},\n Usage: "फ़ाइल पढ़ें",\n Action: func(cCtx *cli.Context) error {\n if cCtx.NArg() == 0 {\n return fmt.Errorf("फ़ाइल का नाम बताएं")\n }\n data, _ := os.ReadFile(cCtx.Args().First())\n fmt.Println(string(data))\n return nil\n },\n },\n {\n Name: "write",\n Aliases: []string{"w"},\n Usage: "फ़ाइल में स्ट्रिंग लिखें",\n Flags: []cli.Flag{\n &cli.StringFlag{\n Name: "content",\n Aliases: []string{"c"},\n Usage: "लिखने के लिए सामग्री",\n },\n },\n Action: func(cCtx *cli.Context) error {\n content := cCtx.String("content")\n if content == "" {\n return fmt.Errorf("--content निर्दिष्ट करें")\n }\n return os.WriteFile(cCtx.Args().First(), []byte(content), 0644)\n },\n },\n },\n }\n\n if err := app.R