بعضی وقت ها فقط می خواهیم یک فرآیند را خودکار کنیم، خیلی ها حوصله درگیر شدن با رابط کاربری را ندارند یا فقط دنبال آن هستند که سریعتر به نتیجه برسند، اینجاست که شما باید به فکر یک CLI باشید. یک برنامه خط فرمان که کارتان را راه بیندازد.
سرعت فوق العاده و امکانات بالای زبان GO در چند سال اخیر باعث شده برنامه نویس های بیشتری به این زبان علاقه مند شوند، از این رو هرروز با افزایش جامعه گولنگ، کتابخانه ها و پکیج های متنوعی برای این زبان منتشر می شود. گو بخاطر کامپایل سریع و کراس-پلتفرم بودن پتانسیل بالایی برای اپلیکیشن های خط فرمان دارد، از این رو میخواهیم یکی از کتابخانه های مطرح در این حوزه را به صورت مختصر معرفی بکنم.
کبرا (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 را باز کنید باید تقریبا مطابق تصویر زیر باشد.
قسمت اول زیر بخش 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 alter the default behavior of commands
برای ایجاد یک فلگ برای دستور datetime کافی است خط زیر را در انتهای تابع init اضافه کنید.
datetimeCmd.Flags().StringP("format", "f", "", "Format for datetime") // args: // 0: Full Name // 1: Shorthand // 2: Default Value // 3: Description
و برای استفاده از آن داخل تابع Run
format, err := cmd.Flags().GetString("format") if err != nil { log.Fatalln(err) } dateTime := time.Now() if format == "" { fmt.Println(dateTime) } else { fmt.Println(dateTime.Format(format)) }
یادتان نرود "log" را import کنید.
در نهایت:
خب حالا ببینیم چی داریم!
$ go install myApp $ myApp datetime -f "2006/01/02-15:04:05" // Or myApp datetime --format "2006/01/02-15:04:05"
در مورد فرمت تاریخ و زمان اینجا بخوانید.
در این بلاگ پست سعی شده است به صورت مختصر آشنایی اولیه با Cobra ایجاد شود، قطعا این کتابخانه قابلیت های شخصی سازی متنوع تری دارد که بیان آن ها در این پست گنجایش ندارد، در صورت علاقه مندی می توانید به داکیومنت مراجعه کنید. لطفا نظرات و انتقادات خودتونو برای بهتر شدن این نوشته مطرح کنید.
برای مشاهده نمونه کاملتر اینجا مراجعه کنید. ( برنامه خط فرمان برای تولید نمودار بر اساس دیتای ورودی )
در انتها از وقتی که گذاشتید تشکر میکنم.