本文转载自微信公众号《程序员工具宝典》,作者狐狸。转载本文请联系ProgrammerTools公众号。Cobra简介Cobra是一个用于创建强大的现代CLI应用程序的库,也是一个用于生成应用程序和命令文件的程序。Cobra用于许多Go项目,例如Kubernetes、Hugo和GithubCLI等。此列表包含更广泛的使用Cobra的项目列表。概述Cobra是一个库,它提供了一个简单的界面来创建强大的现代CLI界面,类似于git&go工具。Cobra也是一个应用程序,它将生成您的应用程序框架,以便快速开发基于Cobra的应用程序。Cobra提供:简单易用的基于子的CLI:应用程序服务器、应用程序获取等完全符合POSIX标准的标志(包括短版和长版)嵌套子命令全局、本地和级联标志易于使用cobrainitappname&cobra生成应用程序和命令添加cmdname明智的建议(appsrver...是你的意思应用程序服务器?)自动生成命令和标志的帮助自动帮助标志识别-h,--help等。为您的应用程序自动生成shell自动完成(bash,zsh,fish,powershell)自动为您的应用程序生成手册页命令别名,这样您就可以在不破坏它们的情况下进行更改定义您自己的帮助、用法等灵活性。可选与viper紧密集成以用于12因素应用程序概念Cobra构建在命令、参数和标志的结构之上。命令代表动作,参数是事物,标志是这些动作的修饰符。最好的应用程序在使用时读起来像句子,因此,用户凭直觉知道如何与它们互动。要遵循的模式是APPNAMEVERBNOUN--ADJECTIVE。或APPNAMECOMMANDARG--FLAG一些真实的例子可以更好地说明这一点。在下面的示例中,“server”是命令,“port”是标志:hugoserver--port=1313在这个命令中,我们告诉Git克隆url的内容。gitcloneURL--cobra的裸安装很容易。首先,使用goget安装最新版本的库。此命令将安装cobra生成器可执行文件以及库及其依赖项:goget-ugithub.com/spf13/cobra接下来,在您的应用程序中包含Cobra:import"github.com/spf13/cobra"入门欢迎您提供您的自己的org,但通常基于Cobra的应用程序将遵循以下组织结构:?appName/?cmd/add.goyour.gocommands.gohere.gomain.go在Cobra应用程序中,通常main.go文件非常简单。它有一个目的:初始化Cobrapackagemainimport("{pathToYourApp}/cmd")funcmain(){cmd.Execute()}Cobra创建具有目录结构image-20210218100009073基本命令的root.go文件,定义基本命令packagecmdimport("github.com/spf13/cobra")varRootCmd=&cobra.Command{使用:"gonne",运行:func(cmd*cobra.Command,args[]string){iflen(args)==0{cmd.Help()return}},}在main函数中使用命令,就是那个简单的main.go文件);err!=nil{fmt.Println(err)os.Exit(1)}}Windows环境下编译gobuild-ogonne.exe,执行命令查看效果。输出如下gonne.exe用法:gonne[flags]gonne[command]可用命令:help关于任何命令版本的帮助打印Gonne的版本号Flags:-h,--helphelpforgonneUse"gonne[command]--help”以获取有关命令的更多信息。子命令在基础命令中添加子命令也很简单。base命令和main方法中不需要写任何代码,只需要新建一个go文件,多个子命令也相互独立。好优雅的代码,告别各种情况加版本命令用法:在cmd目录下加一个version.go文件,内容如下packagecmdimport"github.com/spf13/cobra"funcinit(){RootCmd.AddCommand(versionCmd)}varversionCmd=&cobra.Command{使用:"version",简称:"PrinttheversionnumberofGonne",运行:func(cmd*cobra.Command,args[]string){println("gonneversionis0.0.1")},}init()函数在base命令中添加这条命令,编译后执行gonneversiongonneversionis0.0.1资源列表https://github.com/spf13/cobra
