cobra-强大的CLI应用程序库
cobra介绍

Cobra是一个用于创建强大的现代CLI应用程序的库,也是一个用于生成应用程序和命令文件的程序。
Cobra用于许多Go项目,如Kubernetes、Hugo和Github CLI等。此列表包含了使用Cobra的更广泛的项目列表。
GitHub地址
https://github.com/spf13/cobra
概述
Cobra是一个库,提供了一个简单的界面来创建功能强大的现代CLI界面,类似于git&go工具。
Cobra还是一个应用程序,它将生成您的应用程序框架以快速开发基于Cobra的应用程序。
眼镜蛇提供:
- 简单易用的基于子的CLI:
app server,app fetch等。 - 完全兼容POSIX的标志(包括短版和长版)
- 嵌套子命令
- 全局,局部和级联标志
- 易产生的应用程序和命令与
cobra init appname&cobra add cmdname - 明智的建议(
app srver……是您的意思app server吗?) - 自动生成命令和标志的帮助
- 自动帮助标志识别
-h,--help等等。 - 为您的应用程序自动生成的外壳自动完成功能(bash,zsh,fish,powershell)
- 自动为您的应用程序生成手册页
- 命令别名,以便您可以更改内容而不会破坏它们
- 定义自己的帮助,用法等的灵活性。
- 可选与viper紧密集成,可用于12因子应用程序
概念
Cobra建立在命令,参数和标志的结构上。
命令代表动作,Args是事物,Flags是这些动作的修饰符。
最好的应用程序在使用时读起来就像句子,结果,用户直观地知道如何与之交互。
遵循的模式是 APPNAME VERB NOUN --ADJECTIVE. 或 APPNAME COMMAND ARG --FLAG
一些真实的例子可以更好地说明这一点。
在以下示例中,“服务器”是命令,“端口”是标志:
hugo server --port=1313
在此命令中,我们告诉Git克隆url的内容。
git clone URL --bare
安装
使用眼镜蛇很容易。首先,使用go get来安装该库的最新版本。此命令将安装cobra生成器可执行文件以及库及其依赖项:
go get -u github.com/spf13/cobra
Next, include Cobra in your application:
import "github.com/spf13/cobra"
入门
欢迎您提供自己的组织,但是通常基于Cobra的应用程序将遵循以下组织结构:
▾ appName/
▾ cmd/
add.go
your.go
commands.go
here.go
main.go
在Cobra应用程序中,通常main.go文件非常裸露。它有一个目的:初始化眼镜蛇
package main
import (
"{pathToYourApp}/cmd"
)
func main() {
cmd.Execute()
}
Cobra使用
目录结构

基命令
创建root.go文件,定义一个基命令
package cmd
import (
"github.com/spf13/cobra"
)
var RootCmd = &cobra.Command{
Use: "gonne",
Run: func(cmd *cobra.Command, args []string) {
if len(args) == 0 {
cmd.Help()
return
}
},
}
在main函数中使用命令,就是这么简单
main.go文件
package main
import (
"demo-practice/cobra/cmd"
"fmt"
"os"
)
func main() {
if err := cmd.RootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
在windows环境下编译
go build -o gonne.exe
执行命令查看效果,输出内容如下所示
gonne.exe
Usage:
gonne [flags]
gonne [command]Available Commands:
help Help about any command
version Print the version number of GonneFlags:
-h, --help help for gonneUse "gonne [command] --help" for more information about a command.
子命令
在基命令上增加子命令也相当简单,根本无需在基命令和main方法中写任何代码,只需新建一个go文件,多个子命令间也是相互独立的,多么优雅的代码,告别各种case
增加一个版本命令用法:
在cmd目录下增加一个version.go文件,内容如下
package cmd
import "github.com/spf13/cobra"
func init() {
RootCmd.AddCommand(versionCmd)
}
var versionCmd = &cobra.Command{
Use: "version",
Short: "Print the version number of Gonne",
Run: func(cmd *cobra.Command, args []string) {
println("gonne version is 0.0.1")
},
}
init()函数将此命令添加到基命令下
编译后执行 gonne version
gonne version is 0.0.1
cobra-强大的CLI应用程序库的更多相关文章
- go-admin在线开发平台学习-2[程序结构分析]
紧接着上一篇,本文我们对go-admin下载后的源码进行分析. 首先对项目所使用的第三方库进行分析,了解作者使用的库是否是通用的官方库可以有助于我们更快地阅读程序.接着对项目的main()方法进行分析 ...
- golang常用库:cli命令行/应用程序生成工具-cobra使用
golang常用库:cli命令行/应用程序生成工具-cobra使用 一.Cobra 介绍 我前面有一篇文章介绍了配置文件解析库 Viper 的使用,这篇介绍 Cobra 的使用,你猜的没错,这 2 个 ...
- 推荐一款强大的前端CLI命令行工具
背景 命令行界面交互开源工具 CloudBase CLI 自发布以来,受到了大量开发者的欢迎.近期,我们发布了新鲜打磨的 CloudBase CLI 1.0 Beta,引入了许多利于开发者的新特性,下 ...
- golang命令行库cobra的使用
简介 Cobra既是一个用来创建强大的现代CLI命令行的golang库,也是一个生成程序应用和命令行文件的程序.下面是Cobra使用的一个演示: Cobra提供的功能 简易的子命令行模式,如 app ...
- golang 命令行cobra妙用
为什么使用命令行 大型项目中少不了数据升级,如果采用web服务,一来不够安全,二来数据量大的时候也会出超时的情况.这时使用命令行是比较合适的方式了. 命令行中的MVC web项目一般采用MVC模式,对 ...
- Golang: Cobra命令行参数库的使用
将cobra下载到 $GOPATH,用命令: go get -v github.com/spf13/cobra/cobra 然后使用 go install github.com/spf13/cobra ...
- click python cli 开发包
python click 包是一个方便的cli 开发包,我们可以用来开发强大的cli 应用 使用venv 进行环境准备,示例代码来自官方 venv 环境准备 python3 -m venv demoa ...
- Go命令行库Cobra的核心文件root.go
因为docker及Kubernetes都在用cobra库,所以记录一下. 自定义的地方,高红标出. root.go /* Copyright © 2019 NAME HERE <EMAIL AD ...
- Go 每日一库之 cobra
简介 cobra是一个命令行程序库,可以用来编写命令行程序.同时,它也提供了一个脚手架, 用于生成基于 cobra 的应用程序框架.非常多知名的开源项目使用了 cobra 库构建命令行,如Kubern ...
随机推荐
- linux c驴杂记
C语言标准库中包含了各种用于处理错误的函数和宏.1.assert( ) 宏 #include<assert.h>void assert( int expression );可用于诊断程序b ...
- Java程序操作HDFS
1.新建项目2.导包 解压hadoop-2.7.3.tar.gzE:\工具\大数据\大数据提升资料\01-软件资料\06-Hadoop\安装包\Java1.8环境下编译\hadoop-2.7.3\ha ...
- GPLT L2-006 树的遍历(二叉树)
题意: 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 思路: 后序遍历序列 = 左子树遍历序列 + 右子树遍历序列 + 根节点. 中序遍历序列 = ...
- Educational Codeforces Round 86 (Div. 2)
比赛链接:https://codeforces.com/contest/1342 A - Road To Zero 题意 有两个非负整数 x, y 以及两种操作: 支付 a 点代价使其中一个数加一或减 ...
- Gym 101485 E Elementary Math 网络流 或者 二分图
题意: 输入一个n,后面输入n行,每一行两个数a.b.你可以对a.b进行三种操作:+.-.* 你需要保证对每一行a.b选取一个操作得到一个结果 你要保证这n行每一个式子选取的操作之后得到的结果都不一样 ...
- fzu2198 快来快来数一数
Accept: 204 Submit: 627 Time Limit: 1000 mSec Memory Limit : 65536 KB Problem Description n个六 ...
- ACdream1414 Geometry Problem
Problem Description Peter is studying in the third grade of elementary school. His teacher of ...
- 后缀数组Da模板+注释 以及 dc3模板
后缀数组Da模板: 1 /* 2 后缀数组倍增法Da板子 3 */ 4 #include <cstdlib> 5 #include <cstring> 6 #include & ...
- 牛客编程巅峰赛S1第3场 - 青铜&白银 A.位数求和
题意:求所有\(n\)位数每位之和等于\(m\)的数的和. 题解:数据范围非常小,我们可以直接暴力枚举\(t\)到\(10*t\)的所有数字,逐位分解判断即可. 代码: class Solution ...
- Makefile 赋值 函数定义 等小知识点
1.赋值 == 到用的时候实际才去赋值:= 立刻赋值?= 未赋值才赋值+= 2.多层变量 多层变量引用(各种复杂组合...)a =bb= cc= dd =1$($($($(a)))) 最终等于1 3. ...