cobra/pflag في Go: دليل شامل مع أمثلة عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مكتبة cobra/pflag في Go: أوامر سطر أوامر قوية ومرنة

في عالم تطوير تطبيقات Go، يُعد إنشاء واجهات سطر أوامر (CLI) سهلة الاستخدام ومرنة من المهام الأساسية. توفر المكتبة القياسية flag إمكانيات أساسية لتحليل الأعلام (flags)، لكن وظائفها محدودة. هنا تأتي cobra/pflag كمكتبة قوية توسع إمكانيات الحزمة القياسية وتُعد جزءًا لا يتجزأ من نظام Cobra البيئي (الإطار الشهير لإنشاء تطبيقات CLI).

الميزة الرئيسية لـ pflag مقارنةً بـ flag القياسية هي دعم أنماط الأعلام مثل POSIX/GNU (الأعلام الطويلة بشرطتين، مثل --verbose) وBSD (الأعلام القصيرة بشرطة واحدة، مثل -v). تدعم المكتبة أيضًا دمج الأعلام القصيرة (-abc بدلاً من -a -b -c)، والأعلام ذات الوسائط الإجبارية، وأعلام العد، وغيرها الكثير. pflag متوافقة تمامًا مع واجهة flag.Value، مما يسهل ترحيل الكود الموجود.

تُستخدم هذه المكتبة بنشاط في مشاريع معروفة مثل Kubernetes وHelm وHugo والعديد غيرها. إذا كنت تخطط لإنشاء تطبيق CLI احترافي بلغة Go، فإن 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"

أهم الدوال والطرق

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

تنشئ علمًا من نوع منطقي (boolean). أعلام تشغيل/إيقاف لا تتطلب قيمة (مجرد وجودها يعني التفعيل).

توصيات