در دنیای نرمافزار مدرن، رابط خط فرمان (CLI) همچنان ابزاری قدرتمند برای توسعهدهندگان، مهندسان DevOps و کاربران حرفهای است. چه در حال ساخت ابزار استقرار، مدیر پیکربندی یا ابزار توسعهدهنده باشید، یک CLI باکیفیت میتواند بهرهوری را به طور قابل توجهی افزایش دهد. اگرچه Go به دلیل سادگی و عملکرد خود شناخته شده است، اما نوشتن یک CLI از صفر میتواند به دلیل پیچیدگیهای تجزیه آرگومانها، تولید راهنما و مدیریت خطاها به سرعت خستهکننده شود.
اینجاست که Cobra وارد عمل میشود. این کتابخانه استاندارد غیررسمی برای ساخت برنامههای CLI در Go است. توسط غولهای صنعتی مانند Kubernetes، Hugo و Helm استفاده میشود، Cobra رابطی ساده اما قدرتمند برای ایجاد برنامههای خط فرمان انعطافپذیر، سریع و کاربرپسند ارائه میدهد. در این پست، بررسی میکنیم که چگونه میتوان از Cobra برای ساخت ابزارهای CLI در سطح حرفهای استفاده کرد.
چرا Cobra را انتخاب کنیم؟
قبل از غرق شدن در کد، درک این موضوع ضروری است که چرا Cobra به گزینه اصلی برای توسعه CLI در Go تبدیل شده است. برخلاف بستههای خام flag که نیاز به سیمکشی دستی آرگومانها و زیردستورات دارند، Cobra موارد زیر را ارائه میدهد:
- تولید خودکار راهنما: Cobra به طور خودکار پرچمهای
--helpو مستندات را برای دستورات شما ایجاد میکند. - پشتیبانی از زیردستورات: این کتابخانه به راحتی از دستورات سلسلهمراتبی (مانند
kubectl get pods) پشتیبانی میکند. - ساختار یکپارچه: این کتابخانه یک الگوی ثابت برای سازماندهی دستورات و پرچمها اعمال میکند.
- یکپارچگی با Viper: Cobra به صورت بینقص با Viper یکپارچه میشود و مدیریت پیکربندی را بسیار آسان میکند.
راهاندازی پروژه شما
برای شروع، باید ماژول Go خود را مقداردهی اولیه کرده و کتابخانه Cobra را نصب کنید. ترمینال خود را باز کنید و دستورات زیر را اجرا کنید:
mkdir my-cli-tool
cd my-cli-tool
go mod init github.com/username/my-cli-tool
go get github.com/spf13/cobra
با نصب وابستگیها، میتوانیم شروع به ساختاردهی برنامه خود کنیم. Cobra بر اساس سلسلهمراتب دستور ریشه و زیردستورات عمل میکند. دستور ریشه نقطه ورود برنامه شما است، در حالی که زیردستورات عملیات خاصی را نشان میدهند که کاربر میتواند انجام دهد.
ایجاد دستور ریشه
دستور ریشه نقطه شروع CLI شما است. این دستور معمولاً خودش هیچ عملیاتی انجام نمیدهد، بلکه به عنوان ظرفی برای زیردستورات عمل میکند. در Cobra، دستورات توسط ساختار *cobra.Command نمایش داده میشوند. بیایید یک دستور ریشه ساده تعریف کنیم:
package main
import (
"fmt"
"log"
"github.com/spf13/cobra"
)
func main() {
// Define the root command
var rootCmd = &cobra.Command{
Use: "mycli",
Short: "My CLI is a sample tool",
Long: `My CLI is a demonstration tool built with Cobra to showcase CLI creation in Go.`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Welcome to My CLI!")
},
}
// Execute the root command
if err := rootCmd.Execute(); err != nil {
log.Fatal(err)
}
}
در این قطعه کد، ما Use (نام دستور)، Short (توضیح مختصر برای خروجی راهنما) و Long (مستندات دقیق) را تعریف میکنیم. تابع Run شامل منطق اجرایی است که هنگام فراخوانی دستور اجرا میشود.
افزودن زیردستورات و پرچمها
ابزارهای CLI واقعی معمولاً دارای چندین عملیات هستند. بیایید یک زیردستور به نام greet اضافه کنیم که یک پرچم نام را میپذیرد:
// Add a subcommand
var greetCmd = &cobra.Command{
Use: "greet [name]",
Short: "Greet someone",
Run: func(cmd *cobra.Command, args []string) {
name, _ := cmd.Flags().GetString("name")
fmt.Printf("Hello, %s!\n", name)
},
}
// Define a string flag for the greet command
greetCmd.Flags().StringP("name", "n", "World", "Name of the person to greet")
// Add the subcommand to the root command
rootCmd.AddCommand(greetCmd)
با اتصال greetCmd به rootCmd با استفاده از AddCommand، Cobra به طور خودکار مسیریابی را مدیریت میکند. متد Flags().GetString به ما امکان میدهد مقداری را که توسط کاربر وارد شده بازیابی کنیم، با یک مقدار پیشفرض در صورت عدم ارائه آن.
نتیجهگیری
Cobra به طور قابل توجهی کدهای تکراری (boilerplate) مورد نیاز برای ساخت برنامههای CLI در Go را کاهش میدهد. با ارائه یک چارچوب قوی برای مدیریت دستورات، پرچمها و مستندات راهنما، به توسعهدهندگان اجازه میدهد تا بر منطق اصلی ابزارهای خود تمرکز کنند، نه تجزیه ورودی کاربر. چه در حال ساخت یک ابزار کوچک باشید و چه یک ابزار سازمانی پیچیده، Cobra ساختار و انعطافپذیری لازم را برای ایجاد رابطهای خط فرمان حرفهای و کاربرپسند فراهم میکند.
امروز ساخت ابزار خط فرمان بعدی خود را با Cobra آغاز کنید و به جمع توسعهدهندگانی بپیوندید که تجربیات خط فرمان قدرتمند، کارآمد و شیک ایجاد میکنند.