0. 前言
Cobra(眼镜蛇)是一个库,其提供简单的接口来创建强大现代的CLI接口,类似于git或者go工具。同时,它也是一个应用,用来生成个人应用框架,从而开发以Cobra为基础的应用。Docker源码中使用了Cobra。
Cobra基于三个基本概念commands
,arguments
和flags
。其中commands代表行为,arguments代表数值,flags代表对行为的改变。
基本模型如下:
1 | APPNAME COMMAND ARG --FLAG |
1. 安装和使用
安装:
1 | go get -u github.com/spf13/cobra/cobra |
你的项目结构可能如下:
1 | ▾ appName/ |
1.1 main.go
In a Cobra app, typically the main.go file is very bare(裸露). It serves one purpose: initializing Cobra.
1 | package main |
1.2 rootcmd
1 | var rootCmd = &cobra.Command{ |
1.3 additional commands
1 | package cmd |
可以简单执行下面命令查看效果
1 | go run main.go help |
3. cobra 生成器
在文件夹github.com/spf13/cobra/cobra下使用go install, 生成 cobra命令
命令cobra init [yourApp]
将会创建初始化应用,yourApp 是你的项目名称。它会在你的 GOPATH 目录下面生成项目。最新的操作方式:
1 | cd /Users/liuwei/golang/src/github.com/unix2dos/golangTest |
接下来我们用cobra add
来添加一些子命令。在你项目的目录下,运行下面这些命令:
1 | cobra add serve |
这样以后,你就可以运行上面那些 app serve 之类的命令了。项目目录如下:
1 | ▾ app/ |
4. 使用Flags
cobra 有两种 flag,一个是全局变量,一个是局部变量。全局什么意思呢,就是所以子命令都可以用。局部的只有自己能用。先看全局的:
1 | RootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.cobra_exp1.yaml)") |
在看局部的:
1 | RootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") |
区别就在 RootCmd 后面的是 Flags 还是 PersistentFlags。