cobra
github.com/spf13/cobra
Cobra 是一个 Go 语言的 CLI 框架。它包含一个用于创建强大现代 CLI 应用的库,以及一个用于快速生成基于 Cobra 的应用和命令文件的工具。
快速使用只需要掌握生成工具cobra-cli的用法就行。进阶内容以后有需要再学。
cobra-cli
# 安装工具
go install github.com/spf13/cobra-cli@latest
# 初始化项目
cobra-cli init
# 添加命令
cobra-cli add serve
cobra-cli add config
cobra-cli add create -p 'configCmd' # 使用 -p 向 config 命令添加子命令
项目结构:
▾ app/
▾ cmd/
config.go
create.go
serve.go
root.go
main.go
命令定义
package cmd
import (
"fmt"
"github.com/spf13/cobra"
)
func init() {
rootCmd.AddCommand(versionCmd)
}
var versionCmd = &cobra.Command{
Use: "version",
Short: "Print the version number of Hugo",
Long: `All software has versions. This is Hugo's`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Hugo Static Site Generator v0.9 -- HEAD")
},
}
Use: 使用方法Short: 简短介绍Long: 详细介绍Run: 具体逻辑
设置标志
标志同时在命令内使用和init中绑定,所以需要定义为外部变量。
解析变量
常用的变量类型有string,int,bool等,有Var和P两个后缀,其中:
Var: 带Var表示需要传入指针接收值,不带则直接返回值的指针;P: 带P表示同时指定短名称和长名称,不带则只支持长名称。
以string为例:
func String(name string, value string, usage string) *string
func StringP(name, shorthand string, value string, usage string) *string
func StringVar(p *string, name string, value string, usage string)
func StringVarP(p *string, name, shorthand string, value string, usage string)
本地和持久化
有两种方式设置标志,分别表示本地和持久化:
Flags(): 本地标志,只在当前命令有效;PersistentFlags(): 持久化标志,在当前命令及其子命令有效。
示例:
// 本地标志
rootCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from")
// 持久化标志
rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output")
必选标志
标志默认是可选的,但也可以通过 MarkFlagRequired() 主动声明为必选,当未设置时将报错。示例:
rootCmd.Flags().StringVarP(&Region, "region", "r", "", "AWS region (required)")
rootCmd.MarkFlagRequired("region")