أطر CLI لـ Go (Golang): دليل شامل
Go (Golang) هي لغة مثالية لإنشاء أدوات سطر الأوامر (CLI). بفضل التجميع السريع، والدعم المدمج للتوازي، والتوزيع البسيط كملف ثنائي واحد، أصبحت Go المعيار الفعلي لتطوير تطبيقات CLI. ومع ذلك، لإنشاء واجهات سطر أوامر معقدة وسهلة الاستخدام وقابلة للتوسع، غالبًا ما تكون المكتبة القياسية flag غير كافية. هنا تأتي الأطر المتخصصة للإنقاذ. في هذه المقالة، سنستعرض بالتفصيل ثلاثة من أشهر أطر CLI لـ Go: Cobra، urfave/cli، وKong، ونقارن إمكانياتها ونعرض أمثلة على الاستخدام.
لماذا يجب استخدام إطار عمل CLI؟
تطوير تطبيق CLI من الصفر يمكن أن يتحول بسرعة إلى فوضى، خاصة عندما يتعلق الأمر بـ:
- دعم الأوامر المتداخلة (subcommands) والعلامات (flags).
- التوليد التلقائي للمساعدة (
--help). - معالجة الأخطاء والتحقق من صحة الوسائط.
- الإكمال التلقائي (bash/zsh completion).
تحل الأطر هذه المشكلات من خلال توفير بنية جاهزة ومجموعة من الأدوات.
1. Cobra — ملك CLI في Go
Cobra هو الإطار الأكثر شيوعًا لإنشاء CLI في Go. يُستخدم في عمالقة مثل Kubernetes، Hugo، Docker، وGitHub CLI. يعتمد Cobra على مفهوم الأوامر والوسائط والعلامات.
الإمكانيات الرئيسية لـ Cobra:
- الأوامر والأوامر الفرعية: أي إجراء هو أمر (
app serve،app init). - العلامات: عالمية (
--verbose) ومحلية للأمر. - المساعدة التلقائية: تُنشأ من أوصاف الأوامر.
- الإكمال التلقائي: دعم مدمج لـ bash، zsh، fish، وPowerShell.
- مولد الكود: أداة
cobra-cliتنشئ هيكل المشروع.
مثال كود باستخدام Cobra:
package main
import ( "fmt" "github.com/spf13/cobra")
func main() { var rootCmd = &cobra.Command{ Use: "greet", Short: "Greet is a simple CLI tool", Long: "A simple CLI tool to greet people.", Run: func(cmd *cobra.Command, args []string) { fmt.Println("Hello! Use 'greet hello --name' to greet someone.") }, }
var name string var helloCmd = &cobra.Command{ Use: "hello", Short: "Greet a person", Run: func(cmd *cobra.Command, args []string) { fmt.Printf("Hello, %s!", name) }, }
helloCmd.Flags().StringVarP(&name, "name", "n", "World", "Name to greet") rootCmd.AddCommand(helloCmd) rootCmd.Execute()}التشغيل: go run main.go hello --name=PythonLib سيطبع Hello, PythonLib!.
2. urfave/cli — البساطة والحد الأدنى
المعروف سابقًا باسم codegangsta/cli، يشتهر هذا الإطار ببساطته وواجهة برمجة التطبيقات الأنيقة. إنه مناسب تمامًا للمشاريع الصغيرة والمتوسطة التي لا تحتاج إلى كل قوة Cobra.
الميزات الرئيسية لـ urfave/cli:
- الأسلوب التصريحي: يتم وصف التطبيق كهيكل بيانات.
- التوليد التلقائي للمساعدة: جميلة وقابلة للقراءة.
- دعم الإجراءات: كل أمر له وظيفة معالج خاصة به.
- أنواع العلامات المدمجة: سلاسل، أرقام، قيم منطقية، مدة، وحتى ملفات.
مثال كود باستخدام urfave/cli:
package main
import ( "fmt" "log" "os"
"github.com/urfave/cli/v2")
func main() { app := &cli.App{ Name: "calc", Usage: "A simple calculator", Comman