golang中命令行库cobra的使用方法示例

2020-01-28 13:06:26于丽

简介

Cobra既是一个用来创建强大的现代CLI命令行的golang库,也是一个生成程序应用和命令行文件的程序。下面是Cobra使用的一个演示:

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

如何使用

上面所有列出的功能我没有一一去使用,下面我来简单介绍一下如何使用Cobra,基本能够满足一般命令行程序的需求,如果需要更多功能,可以研究一下源码github。

安装cobra

Cobra是非常容易使用的,使用go get来安装最新版本的库。当然这个库还是相对比较大的,可能需要安装它可能需要相当长的时间,这取决于你的速网。安装完成后,打开GOPATH目录,bin目录下应该有已经编译好的cobra.exe程序,当然你也可以使用源代码自己生成一个最新的cobra程序。


> go get -v github.com/spf13/cobra/cobra

使用cobra生成应用程序

假设现在我们要开发一个基于CLIs的命令程序,名字为demo。首先打开CMD,切换到GOPATH的src目录下[^1],执行如下指令:
[^1]:cobra.exe只能在GOPATH目录下执行


src> ..bincobra.exe init demo 
Your Cobra application is ready at
C:Usersliubo5Desktoptranscoding_toolsrcdemo
Give it a try by going there and running `go run main.go`
Add commands to it by running `cobra add [cmdname]`

在src目录下会生成一个demo的文件夹,如下:

▾ demo
    ▾ cmd/
        root.go
    main.go

如果你的demo程序没有subcommands,那么cobra生成应用程序的操作就结束了。

如何实现没有子命令的CLIs程序

接下来就是可以继续demo的功能设计了。例如我在demo下面新建一个包,名称为imp。如下:

▾ demo
    ▾ cmd/
        root.go
    ▾ imp/
        imp.go
        imp_test.go