Go基础(③Cobra)
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