کبرا برای گو ! کتابخانه ای برای ایجاد برنامه های خط فرمان

cobra مقدمهبعضی وقت ها فقط می خواهیم یک فرآیند را خودکار کنیم، خیلی ها حوصله درگیر شدن با رابط کاربری را ندارند یا فقط دنبال آن هستند که سریعتر به نتیجه برسند، اینجاست که شما باید به فکر یک CLI باشید. یک برنامه خط فرمان که کارتان را راه بیندازد.سرعت فوق العاده و امکانات بالای زبان GO در چند سال اخیر باعث شده برنامه نویس های بیشتری به این زبان علاقه مند شوند، از این رو هرروز با افزایش جامعه گولنگ، کتابخانه ها و پکیج های متنوعی برای این زبان منتشر می شود. گو بخاطر کامپایل سریع و کراس-پلتفرم بودن پتانسیل بالایی برای اپلیکیشن های خط فرمان دارد، از این رو میخواهیم یکی از کتابخانه های مطرح در این حوزه را به صورت مختصر معرفی بکنم.کبرا ( Cobra )کبرا (Cobra) کتابخانه ای برای ایجاد برنامه های خط فرمان ( CLI ) می باشد که برای زبان گو به صورت متن باز منتشر شده است. کبرا نه تنها به شما کمک می کند تا یک اپلیکیشن خط فرمان بنویسید بلکه یک انتزاع کلی ( Abstract ) از ساختمان اپلیکیشن در اختیار شما قرار می دهد.شروع به کاردر ابتدا Cobra Generator را نصب کنید.$ go get github.com/spf13/cobra/cobraبعد از اتمام نصب با دستورات زیر پروژه جدیدی ایجاد کنید.$ mkdir myApp; cd myApp $ cobra init --pkg-name myAppلیست فایل های ایجاد شدهاگر ورژن گو شما ۱.۱۱ یا بالاتر باشد می توانید از Go Module برای مدیریت کتابخانه های مورد استفاده در برنامه خود، استفاده نمایید. $ go mod init myAppدو فایل go.mod و go.sum ایجاد خواهد شد، سپس کبرا را نصب کنید.$ go get -u github.com/spf13/cobraشاید سئوال برایتان پیش بیاید که تفاوت دو نسخه که نصب کردیم چه می باشد؟ اولین پکیج که نصب شد در واقع یک جنریتر می باشد و یک ساختار اولیه برای برنامه ایجاد میکند. نصب مورد اولی کاملا اختیاری می باشد و فقط برای راحتی استفاده می شود.ایجاد یک دستوربرای ایجاد یک دستور در برنامه خود دستور زیاد را اجرا کنید.$ cobra add datetimeبجای datetime نام دستور مورد نظر را وارد کنید.حال اگر فایل cmd/datetime.go را باز کنید باید تقریبا مطابق تصویر زیر باشد.datetime.goقسمت اول زیر بخش import ها محل تعریف دستور می باشد. همانطور که مشاهده می کنید متغیر datetimeCmd یک struct از نوع Command می باشد که فیلد های آن به شرح زیر می باشند.Use: با استفاده از آن می توانید دستور را فراخوانی کنیدShort: یک توضیح مختصر در مورد دستور می باشدLong: توضیح مفصل در مورد دستور می باشدRun: عملیاتی که موقع فراخوانی اجرا می شود داخل این بخش قرار می گیردتابع init در پایینترین قسمت فایل در واقع وظیفه متصل کردن این دستور به ساختار برنامه را دارد.خب حالا برای تست برنامه مراحل زیر را طی کنید.$ go install myApp // فایل باینری را به مسیر گو اضافه می کند تا برای کامپیوتر قابل شناسایی باشد $ myApp -hخروجی نهاییتصویر بالا نشان دهنده راهنمای برنامه می باشد، قسمت اول توضیح مفصل دستور root برنامه می باشد ( cmd/root.go )، بخش Usage نوع استفاده از برنامه را نمایش می دهد و Available Commands دستورات موجود در برنامه را لیست می کند که دستوری datetime هم پیداست. اگر با خط فرمان لینوکس/ویندوز/مک آشنا باشید با مفاهیم این تصویر مخصوصا Flags آشنا خواهید بود اگر نه در ادامه شرح داده خواهد شد.خب، با کلیت فایل آشنا شدیم، حالا می خواهیم وقتی کاربر دستور زیر را اجرا کرد، تاریخ و زمان حال را چاپ کنیم.$ myApp datetimeبرای این کار کافی است خطوط زیر را داخل تابع مقابل Run قرار دهید.dateTime := time.Now() fmt.Println(dateTime)آشنایی با Flags هافلگ ها در واقع کنترل کننده های دستور هستند که به کاربر اجازه می دهند تا نوع اجرا، اطلاعات اولیه، نوع خروجی و ... یک دستور را مشخص کنند. Flags alter the default behavior of commandsبرای ایجاد یک فلگ برای دستور datetime کافی است خط زیر را در انتهای تابع init اضافه کنید.datetimeCmd.Flags().StringP(&quotformat&quot, &quotf&quot, &quot&quot, &quotFormat for datetime&quot) // args: // 0: Full Name // 1: Shorthand // 2: Default Value // 3: Descriptionو برای استفاده از آن داخل تابع Runformat, err := cmd.Flags().GetString(&quotformat&quot) if err != nil { log.Fatalln(err) } dateTime := time.Now() if format == &quot&quot { fmt.Println(dateTime) } else { fmt.Println(dateTime.Format(format)) }یادتان نرود "log" را import کنید.در نهایت:فایل نهاییخب حالا ببینیم چی داریم!$ go install myApp $ myApp datetime -f &quot2006/01/02-15:04:05&quot // Or myApp datetime --format &quot2006/01/02-15:04:05&quotدر مورد فرمت تاریخ و زمان اینجا بخوانید.خروجی ها با فلگ و بدون فلگتوضیحات پایانیدر این بلاگ پست سعی شده است به صورت مختصر آشنایی اولیه با Cobra ایجاد شود، قطعا این کتابخانه قابلیت های شخصی سازی متنوع تری دارد که بیان آن ها در این پست گنجایش ندارد، در صورت علاقه مندی می توانید به داکیومنت مراجعه کنید. لطفا نظرات و انتقادات خودتونو برای بهتر شدن این نوشته مطرح کنید.برای مشاهده نمونه کاملتر اینجا مراجعه کنید. ( برنامه خط فرمان برای تولید نمودار بر اساس دیتای ورودی )در انتها از وقتی که گذاشتید تشکر میکنم.GitHubLinkedIn