概述

Cobra 是一个用于创建强大的现代CLI应用程序库,也是用于生成应用程序和命令文件的程序。
Cobra被用在许多Go项目中,如Kubennetes,HugoGihub CLI等等。这个列表包含使用Cobra的更广泛的项目列表。

About

Go现代命令行交互的指令

Table of Contents

Overview


Cobra 是一个库,提供一个创建现代的强大CLI接口,类似于git & go tools。
Cobra也是一个应用程序,它将生成你的应用程序脚手架,以快速开发一个基于Cobra的应用程序。

Cobra 提供:

  • 简单的基于子命令行模式: app server, app fetch,ext。
  • 完全兼容POSIX (包含 短、长版本)
  • 嵌套子命令
  • 全局、本地和串联flags
  • 使用 cobra init appname 和 cobra add cmdname轻松生成应用程序和命名
  • 智能建议(app srver… 你的意思是 app server?)
  • 自动帮助命令和flags的生成
  • 自动帮助flag识别 -h 、—help、etc
  • 自动生成的shell自动完成你的应用程序(bash zsh fish powershell)
  • 为你的应用程序自动生成的帮助页
  • 命令别名,所以你可以在不破坏他们的情况下更改内容
  • 灵活定义 help usage ext
  • 可选与viper 紧密集成的 12-factor 应用

Concepts


Cobra 是建立在一个命令 参数 flags的结构之上。
Commands 代表动作,Args是事物,Flags是这些操作的修饰符。
当使用时,最好的应用程序读起来像是理解句子,因此用户直观地了解他们之间怎样交互。
遵循的模式是 APPNAME VERB NOUN —ADJECTIVE。或 APPNAME COMMAND ARG —FLAG。
现实中的例子更好地阐述这些观点。
下面的例子中,’server’是一个 command,’prot’是一个flag:

  1. hugo server --port=1313

在Command中我们告诉git要去clone 地址。

  1. git clone URL --bare

Commands


Command 是应用程序的核心点。应用程序支持的每个交互包含在一个Command中。一个Command可以有子命令,也可以有选择地运行一个操作。
在上面的例子中,’server’是Command。
更多关于cobra.Command

Flags


flag是一种修改command行为的方法。Cobra支持完全兼容POSIX以及Go flag package。Cobra命令可以定义持久化到子命令的标志,以及仅对该命令可用的标志。
在上面的例子只用,’port’是flag。
Flag功能由pflag libray提供,当添加POSIX标准 flag标准库分支维护相同的接口。

Installing


使用Cobra是简单的。首先,用 go get 安装最新版本库。这个命令将安装可执行的cobra generator 以及库及其依赖项:

  1. go get -u github.com/spf13/cobra

下一步,在你的应用程序包含Cobra:

  1. import "github.com/spf13/cobra"

Getting Started


虽然欢迎你提供自己的组织结构,通过 基于cobra 应用程序按照下面的组织结构:

  1. appName/
  2. cmd/
  3. add.go
  4. your.go
  5. commands.go
  6. here.go
  7. main.go

在cobra应用中,典型的main.go文件是很空的。只有一个目的:初始化 cobra。

  1. package main
  2. import (
  3. "{pathToYourApp}/cmd"
  4. )
  5. func main() {
  6. cmd.Execute()
  7. }

Using the Cobra Generator


cobra 提供了自己的程序,可以创建应用程序并添加你想要的任何命令。很容易地集成到你的应用程序中去。
可以找到关于它的更多信息。