Cobra 是幫你快速開發命令行工具的框架
假設你想做一個叫?todo
?的命令行工具,實現這些功能:
todo add "買牛奶" → 添加待辦
todo list → 查看所有待辦
todo done 1 → 標記第 1 個待辦為已完成
沒有 Cobra 的話,你需要自己寫代碼判斷用戶輸入的是?add
?還是?list
,還要解析后面的參數,非常麻煩。
用 Cobra 的話,你只需要:
定義 add、list、done 這三個子命令
給每個命令寫好具體執行邏輯
剩下的「解析用戶輸入」「判斷執行哪個命令」「生成幫助信息(如 todo --help)」這些事,Cobra 全幫你做了
創建項目
mkdir cobra-demo && cd cobra-demo
go mod init cobra-demo# 安裝 Cobra 庫
go get github.com/spf13/cobra@latest# 安裝 Cobra 命令行生成工具(可選,用于快速創建項目結構)
go install github.com/spf13/cobra-cli@latest# 用 cobra-cli 初始化項目(會生成基本結構)
cobra-cli init
初始化后,項目結構如下
cobra-demo/
├── cmd/
│ └── root.go # 根命令定義
├── go.mod
├── go.sum
└── main.go # 程序入口
add.go代碼
package cmdimport ("fmt""strconv""github.com/spf13/cobra"
)// 定義 add 命令
var addCmd = &cobra.Command{Use: "add", // 命令名稱(使用方式:app add)Short: "將兩個數字相加", // 短描述(幫助信息中顯示)Long: `將兩個整數相加并打印結果。`, // 長描述Args: cobra.ExactArgs(2), // 必須傳入 2 個參數Run: func(cmd *cobra.Command, args []string) {// 解析參數(字符串轉整數)a, err := strconv.Atoi(args[0])if err != nil {fmt.Println("第一個參數必須是整數")return}b, err := strconv.Atoi(args[1])if err != nil {fmt.Println("第二個參數必須是整數")return}// 執行加法并輸出結果fmt.Printf("%d + %d = %d\n", a, b, a+b)},
}// 初始化函數:將 add 命令添加到根命令
func init() {rootCmd.AddCommand(addCmd)
}
然后把add.go放入cmd文件夾,然后運行
go build -o calc.exe
123