Go语言命令行工具包corba的使用
简介:
cobra是一个让你轻松构建命令行程序的包,具有很多特性和功能。如:
- 简易的子命令行模式,如 app server, app fetch等等
- 完全兼容posix命令行模式
- 嵌套子命令subcommand
- 支持全局,局部,串联flags
- 使用Cobra很容易的生成应用程序和命令,使用cobra create appname和cobra add cmdname
- 如果命令输入错误,将提供智能建议,如 app srver,将提示srver没有,是否是app server
- 自动生成commands和flags的帮助信息
- 自动生成详细的help信息,如app help
- 自动识别-h,–help帮助flag
- 自动生成应用程序在bash下命令自动完成功能
- 自动生成应用程序的man手册
- 命令行别名
- 自定义help和usage信息
- 可选的紧密集成的viper apps
- github地址:https://github.com/spf13/cobra
安装:
go get -v github.com/spf13/cobra/cobra
go install github.com/spf13/cobra/cobra
简单使用:
这里仅介绍Flags、Help和Usage的用法。你可以用cobra初始化你的项目,当然也可以自己组织项目。
用cobra初始化项目
corbra init 项目名称
cobra add 包名
一个简单的项目演示,这个项目只有一个文件-main.go,包含在test文件夹里。可以运行go build构建项目,可执行文件为test。cobra的基本用法请看代码。
// Package main provides ...
package main
import (
"fmt"
"github.com/spf13/cobra"
"time"
)
var (
name string
datetime string
//Use指Usage,Run是要运行的函数代码
//main函数只有很简单的代码,其他代码在run函数执行
rootCmd = &cobra.Command{
Use: "test",
Run: run,
}
)
func init() {
/**
* @brief 在init()函数里设置Flag
*
* @param name 变量,存储Flag->author的值
* @param "author" Flag
* @param "yzz" author 的默认值
* @param date 变量,存储Falg->date的值
* @param "date" Flag
* @param time.Date date的默认值
* @param 最后的参数是Flag的解释
*/
rootCmd.PersistentFlags().StringVar(&name, "author", "yzz", "程序作者")
rootCmd.PersistentFlags().StringVar(&datetime, "date", "date", "当前日期")
}
func main() {
rootCmd.Execute()
}
func run(cmd *cobra.Command, args []string) {
//./test --author onename 会设置author
fmt.Println(name)
//./test --date date 输出当前天,--date time 输出当前准确时间
if datetime == "date" {
fmt.Println(time.Now().Day())
} else if datetime == "time" {
fmt.Println(time.Now())
}
}