امیر اسمعیلی
امیر اسمعیلی
خواندن ۴ دقیقه·۴ سال پیش

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

cobra
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
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

و برای استفاده از آن داخل تابع Run

format, 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 ایجاد شود، قطعا این کتابخانه قابلیت های شخصی سازی متنوع تری دارد که بیان آن ها در این پست گنجایش ندارد، در صورت علاقه مندی می توانید به داکیومنت مراجعه کنید. لطفا نظرات و انتقادات خودتونو برای بهتر شدن این نوشته مطرح کنید.

برای مشاهده نمونه کاملتر اینجا مراجعه کنید. ( برنامه خط فرمان برای تولید نمودار بر اساس دیتای ورودی )

در انتها از وقتی که گذاشتید تشکر میکنم.

GitHub

LinkedIn


golanggoclicommand line
دانشجوی مهندسی کامپیوتر و برنامه نویس فول-استک
شاید از این پست‌ها خوشتان بیاید