关于

Cobra 是 Go 的 CLI 框架。它包含一个用于创建功能强大的现代 CLI 应用程序的库,以及一个用于快速生成基于 Cobra 的应用程序和命令文件的工具。

Cobra 由 Go 项目成员和 hugo 作者 spf13 创建,已经被许多流行的 Go 项目采用,比如 kubernetes、docker等

特性

  • 简单的基于子命令的 CLIs:app serverapp fetch 等;
  • 完全兼容 POSIX(可移植操作系统接口) 的标志(包括短版和长版)
  • 嵌套子命令
  • 全局、局部和级联的标志
  • 使用 cobra init appnamecobra add cmdname 轻松生成应用程序和命令
  • 智能提示(app srver ...did you mean app server
  • 自动生成命令和标志的帮助
  • 自动识别 -h--help 等帮助标识
  • 自动为你的应用程序生成的 bash 自动完成
  • 自动为你的应用程序生成 man 手册
  • 命令别名,以便你可以更改内容而不会破坏它们
  • 定义自己的帮助,用法等的灵活性。
  • 可选与 viper 紧密集成,可用于 12factor 应用程序

概念

Cobra 构建在命令(commands)、参数(arguments)和 标志(flags)上。

Commands 代表动作,Args 是事物,Flags 是这些动作的修饰符。

最好的应用程序在使用时会像句子一样读起来。用户将知道如何使用该应用程序,因为他们将自然地了解如何使用它。

遵循的模式是 APPNAME VERB NOUN --ADJECTIVE。 或 APPNAME COMMAND ARG --FLAG

一些真实的例子可以更好地说明这一点。

在以下示例中,server 是命令,port 是标志:

hugo server --port=1313

在此命令中,我们告诉 Git 克隆 url 的内容:

git clone URL --bare

命令(Command)

命令是应用程序的核心。应用程序提供的每一个交互都包含在 Command 中。一个命令可以有子命令和可选的运行一个动作。

在上面的示例中,server 是命令。

Cobra.Command API)

标志(Flags)

一个标志是一种修饰命令行为的方式。Cobra 支持完全符合 [https://zh.wikipedia.org/wiki/可移植操作系统接口) 包。

Cobra 命令可以定义一直保留到子命令的标志和仅可用于该命令的标志。

在上面的例子中,port 是标志。

标志的功能是 pflag 库提供的,该库是一个标准库的 fork,在维护相同接口的基础上兼容了 POSIX(可移植操作系统接口)

简单使用

// 目录结构
├── add
│ └── add.go
├── go.mod
├── go.sum
└── main.go
// main.go
package main import (
"log"
"test/add" "github.com/spf13/cobra"
) var rootCmd = &cobra.Command{
Use: "test",
Short: "测试",
Long: `我要写博客做个测试呢,这是个常提示`,
Version: "v1.1",
} func init() {
rootCmd.AddCommand(add.CmdAdd)
} func main() {
if err := rootCmd.Execute(); err != nil {
log.Fatal(err)
}
}
// add/add.go
package add import (
"fmt" "github.com/spf13/cobra"
) var CmdAdd = &cobra.Command{
Use: "add",
Short: "新键",
Long: "新建个文件",
RunE: RunE,
} var path string func init() {
CmdAdd.Flags().StringVarP(&path, "path", "p", path, "file path")
} func RunE(cmd *cobra.Command, args []string) error {
fmt.Println("假装创建个文件 path=", path)
return nil
}

执行结果

# go run main.go --help
我要写博客做个测试呢,这是个常提示 Usage:
test [command] Available Commands:
add 新键
completion Generate the autocompletion script for the specified shell
help Help about any command Flags:
-h, --help help for test
-v, --version version for test Use "test [command] --help" for more information about a command. # go run main.go add --help
新建个文件 Usage:
test add [flags] Flags:
-h, --help help for add
-p, --path string file path # go run main.go add --path=/user/pass
假装创建个文件 path= /user/pass # go run main.go --version
test version v1.1

Command参数

例子中的cobra.Command是个结构体,有很多字段,都是做什么用的呢?

这些参数是Go语言中cobra库中的Command结构体的字段,用于定义命令行工具的行为和选项。它们的作用如下:

  • Use: 命令名称。
  • Aliases: 命令的别名。
  • SuggestFor: 命令建议使用的单词列表。
  • Short: 命令简短描述。
  • GroupID: 命令所属的命令组。
  • Long: 命令详细描述。
  • Example: 命令的使用示例。
  • ValidArgs: 命令接受的参数列表。
  • ValidArgsFunction: 命令用于提供动态参数补全的函数。
  • Args: 命令的位置参数列表。
  • ArgAliases: 位置参数的别名。
  • BashCompletionFunction: 生成Bash补全的函数。
  • Deprecated: 命令是否已经过时的标志。
  • Annotations: 命令的附加注释信息。
  • Version: 命令版本号。
  • PersistentPreRun: 每次执行该命令之前都会执行的函数。
  • PersistentPreRunE: 每次执行该命令之前都会执行的返回错误的函数。
  • PreRun: 每次执行该命令之前都会执行的函数。
  • PreRunE: 每次执行该命令之前都会执行的返回错误的函数。
  • Run: 执行命令的函数。
  • RunE: 执行命令的返回错误的函数。
  • PostRun: 每次执行该命令之后都会执行的函数。
  • PostRunE: 每次执行该命令之后都会执行的返回错误的函数。
  • PersistentPostRun: 每次执行该命令之后都会执行的函数。
  • PersistentPostRunE: 每次执行该命令之后都会执行的返回错误的函数。
  • FParseErrWhitelist : 忽略特定的解析错误
  • CompletionOptions :控制 shell 自动完成的选项
  • TraverseChildren: 解析父命令的标志后再执行子命令
  • Hidden : 隐藏命令,不在可用命令列表中显示
  • SilenceErrors : 静默下游错误
  • SilenceUsage : 静默错误时不显示用法
  • DisableFlagParsing : 禁用标志解析
  • DisableAutoGenTag : 禁用自动生成的标记
  • DisableFlagsInUseLine : 在打印帮助或生成文档时禁用“[flags]”在用法行中的添加
  • DisableSuggestions : 禁用基于Levenshtein距离的建议
  • SuggestionsMinimumDistance : 显示建议的最小Levenshtein距离

Reference

Go命令行工具cobra的更多相关文章

  1. go Cobra命令行工具入门

    简介 Github:https://github.com/spf13/cobra Star:26.5K   Cobra是一个用Go语言实现的命令行工具.并且现在正在被很多项目使用,例如:Kuberne ...

  2. windows下的命令行工具babun

    什么是babun babun是windows上的一个第三方shell,在这个shell上面你可以使用几乎所有linux,unix上面的命令,他几乎可以取代windows的shell.用官方的题目说就是 ...

  3. 『.NET Core CLI工具文档』(一).NET Core 命令行工具(CLI)

    说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:.NET Core Command Line Tools 翻译:.NET Core命令行工具 什么是 .NET Core ...

  4. 命令行工具aspnet_regiis.exe实现加密和解密web.config

    命令行工具aspnet_regiis.exe,是一个类似于DOS的命令工具,称之为命令解释器.使用命令行工具加密和解密web.config文件中的数据库连接字符串时,只需要简单的语法命令即可. 加密语 ...

  5. nodejs 编写(添加时间戳)命令行工具 timestamp

    Nodejs除了编写服务器端程序还可以编写命令行工具,如gulp.js就是Nodejs编写的. 接下来我们来实现一个添加时间戳的命令: $ timestamp action https://www.n ...

  6. 如何用Node编写命令行工具

    0. 命令行工具 当全局安装模块之后,我们可以在控制台下执行指定的命令来运行操作,如果npm一样.我把这样的模块称之为命令行工具模块(如理解有偏颇,欢迎指正) 1.用Node编写命令行工具 在Node ...

  7. Orchard中的命令行工具

    在Orchard中提供了一个命令行工具,我们可以使用这个命令行工具创建用户.创建博客.生成代码.配置网站.打包模块等.并且这个命令行工具是可以扩充的,只要我们在自己开发的模块中创建一个Command类 ...

  8. Linux 性能监控之命令行工具

    引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...

  9. 命令行工具解析Crash文件,dSYM文件进行符号化

    备份   文/爱掏蜂窝的熊(简书作者)原文链接:http://www.jianshu.com/p/0b6f5148dab8著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 序 在日常开发 ...

  10. MySQL 命令行工具之 mysqldump 深入研究

    mysqldump 是MySQL的一个命令行工具,用于逻辑备份.可以将数据库和表的结构,以及表中的数据分别导出成:create database, create table, insert into的 ...

随机推荐

  1. RocketMQ为什么这么快?我从源码中扒出了10大原因!

    大家好,我是三友~~ RocketMQ作为阿里开源的消息中间件,深受广大开发者的喜爱 而这其中一个很重要原因就是,它处理消息和拉取消息的速度非常快 那么,问题来了,RocketMQ为什么这么快呢? 接 ...

  2. AutoNumber VsCode插件开发

    AutoNumber VsCode插件开发 ::: details 目录 目录 AutoNumber VsCode插件开发 Step. 2: 安装脚手架 Step. 3: 创建空项目 Step. 4: ...

  3. pod常见的非故障及故障状态解析

    在Kubernetes中,Pod的状态可以反映其当前的生命周期状态.是否正常运行或遇到了某些状况.以下是一些Pod常见的非故障状态: Running:这是Pod最常见的非故障状态,表示Pod已经成功调 ...

  4. day06-多表查询02

    多表查询02 4.表复制 自我复制数据(蠕虫复制) 有时,为了对某个sql语句进行效率测试,我们需要海量数据时,可以用此法为表创建海量数据 -- 为了对某个sql语句进行效率测试,我们需要海量数据时, ...

  5. jsp相对路径绝对路径

    jsp相对路径绝对路径 很长一段时间纠结过JSP中的相对路径和绝对路径,也研究过一段时间,今天趁着有点时间,记下来,也有大家分享一下. 1)我们先来理解一下相对路径 首先还是我们的开始,建一个WEB项 ...

  6. FFmpeg命令行之FFmpeg 采集设备

    在使用 FFmpeg 作为编码器时,可以使用FFmpeg采集本地的音视频采集设备的数据,然后进行编码.封装.传输等操作. 例如,我们可以采集摄像头的图像作为视频,采集麦克风的数据作为音频,然后对采集的 ...

  7. Welcome to YARP - 1.认识 YARP 并构建反向代理服务

    目录 Welcome to YARP - 1.认识YARP并搭建反向代理服务 Welcome to YARP - 2.配置功能 Welcome to YARP - 3.负载均衡 Welcome to ...

  8. 基于QGIS生产建筑物高度与遥感影像数据集

    1. 概述 利用遥感影像推知建筑物高度是一经典研究,现有很多学者利用机器学习的方式,利用现有数据进行训练从而构建模型 本文旨在记述使用QGIS进行建筑物高度与遥感影像数据集的获取与制作 如果不想自己动 ...

  9. 在 M1 下搭建 DolphinScheduler 开发调试环境

    Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用 M1 ...

  10. Win10 如何在桌面显示我的电脑

    Win10桌面右键鼠标,然后在弹出来的选项中选择个性化. 选择了个性化后会弹出设置界面,在设置中选择[主题] 找到[桌面图标设置] 点击[桌面图标设置],会弹出一个对话框,该对话框有可以设置显示的图标 ...