Go-cli框架Cobra

2023-11-13

Cobra是前go语言负责人spf13开发的一款go-cli框架,可以轻松规范的处理cli应用场景。
项目地址:https://github.com/spf13/cobra
作者博客: https://spf13.com/
所谓官网:https://cobra.dev/ https://unsplash.com/t/people 图片网站

概念

  • cobra-cli 是cobra的生成器(可以理解为脚手架工具 可以快速搭建)
  • cobra 框架包

理解一些关键词

我们以go的命令运行run做例子
Command 命令
SubCommand 子命令
Argument 参数
Flag 标记参数

go run main.go --config=app.conf

Command:
go

SubCommand  # run是go的子命令 也就是run 是go(Command)的子命令run(SubCommand)
run

Argument  #参数一般值一个预设目标
main.go

Flag:  #标记参数一般以kv形式
--config=app.conf

安装

  • 安装Cobra-cli 生成器,安装后将会在$GOPATH/bin目下生成一个可执行文件,将其配置在系统的环境变量$PATH中保证在shell下可以执行即可安装完成。

go install github.com/spf13/cobra-cli@latest

  • 安装Cobra 可以直接在项目内引用 也可以通过生成器来初始化。

go get -u github.com/spf13/cobra@latest

初始化

在已有go.mod下初始化(推荐)

随着go模块的引入,Cobra生成器已被简化以利用模块。Cobra生成器在Go模块中工作。

#进入有go.mod的项目根目录下执行
cobra-cli init --help
cobra-cli init --author "pro911 <pro911@qq.com>" --license MIT

#1.创建一个应用目录
mkdir -p d:/wwwroot/issue-cli

#2.进入应用目录
cd d:/wwwroot/issue-cli

#3.新建一个go.mod文件
go init mod issue-cli

#4.1初始化cobra项目
cobra-cli init --author "pro911 <pro911@qq.com>" --license MIT --viper  //指定作者信息  指定开源 指定使用viper自动加载viper包

#4.2初始化cobra项目
cobra-cli init --config ./etc/cobra.yaml  //内容如下

#4.2.1cobra.yaml内容 key不区分大小写。
author: pro911x <pro911@qq.com>
LICENSE: apache
useViper: true


添加子命令和子子命令

cobra-cli add version 执行后会在项目的cmd目录下生成一个名称为version.go的文件,该命令的执行文件。

/*
Copyright © 2022 pro911 <pro911@qq.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
package cmd

import (
	"fmt"

	"github.com/spf13/cobra"
)

// versionCmd represents the demo command
var versionCmd = &cobra.Command{
	Use:   "version", //这个是命令的参数 go run main.go version 而不是文件名本身  demo.go
	Short: "版本信息",
	Long: `关于版本的长信息:
他是可以执行一些参数描述和换行进行描述。
描述结束。`,
	Run: func(cmd *cobra.Command, args []string) {
		fmt.Println("version called")
	},
}

func init() {
	rootCmd.AddCommand(versionCmd)

	// Here you will define your flags and configuration settings.

	// Cobra supports Persistent Flags which will work for this command
	// and all subcommands, e.g.:
	// demoCmd.PersistentFlags().String("foo", "", "A help for foo")

	// Cobra supports local flags which will only run when this command
	// is called directly, e.g.:
	// demoCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go-cli框架Cobra 的相关文章

  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • EULA 接受 Bash 脚本

    我有一个尝试安装垃圾箱的脚本 除了 bin 在 more 中打开 EULA 之外 一切正常 在脚本再次开始并自行完成安装之前 您必须手动 ctrl c 退出此 more 实例 因为这更多的是逃离 shell 所以脚本在打开后不知道要运行什么
  • 如何使用 PyAudio 选择特定的输入设备

    通过 PyAudio 录制音频时 如何指定要使用的确切输入设备 我的电脑有两个麦克风 一个内置 一个通过 USB 我想使用 USB 麦克风进行录音 这流类 https people csail mit edu hubert pyaudio
  • Linux 上的“软/硬 nofile”是什么意思

    当我尝试在RedHat EL5上安装软件时 我得到了错误 软 硬nofile的期望值是4096 而默认值是1024 我设法增加了这个数字 但我不知道参数是什么 他们指的是软链接和硬链接吗 我改变的方法是 a 修改 etc security
  • 删除 Python 中某些操作的 root 权限

    在我的 Python 脚本中 我执行了一些需要 root 权限的操作 我还创建并写入文件 我不想由 root 独占所有 而是由运行我的脚本的用户独占所有 通常 我使用以下命令运行脚本sudo 有办法做到上述吗 您可以使用以下方式在 uid
  • “./somescript.sh”和“. ./somescript.sh”有什么区别

    今天我按照一些说明在 Linux 中安装软件 有一个需要首先运行的脚本 它设置一些环境变量 指令告诉我执行 setup sh 但是我执行时犯了一个错误 setup sh 所以环境没有设置 最后我注意到了这一点并继续进行 我想知道这两种调用脚
  • tar.gz 和 tgz 是同一个东西吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我创建了 tgz 文件tar czvf filecommand then 我最终得到了一个 tgz 文件 我想知道它和tar gz 之间的
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul
  • 如何从 Linux 命令行确定 LCD 显示器是否打开

    如何通过 Linux 命令行判断计算机的显示器是否打开 关闭 我传统上认为显示器是仅输出的设备 但我注意到 Gnome 显示器首选项对话框具有 检测显示器 功能 这可以推广到确定显示器是否物理关闭吗 VESA DDC 连接是I2C http
  • %config(noreplace) 文件上出现意外的 RPM 冲突

    我正在创建我自己的RPM using rpmbuild My RPM 包含配置文件哪个应该永远不会被覆盖 即使 RPM 包含这些配置文件的新版本 为了存档这个 我用以下标签标记了它们 config noreplace opt mypacka
  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 在Linux中将日期附加到文件名

    我想在文件名旁边添加日期 somefile txt 例如 somefile 25 11 2009 txt 或 somefile 25Nov2009 txt 或任何类似的内容 也许脚本或终端窗口中的某些命令可以执行 我正在使用Linux Ub
  • 如何从外部模块导出符号?

    我在内核源代码树之外进行编码 有两个模块 第一个printt有一个功能printtty 将字符串打印到当前 tty 以及第二个模块hello这会调用printtty 在初始化期间 我已经添加了EXPORT SYMBOL printtty 在
  • 在哪里可以找到所有 C 标准库的源代码?

    我正在寻找所有 C 标准库的完整源代码 也就是说 我正在寻找 stdio h stdlib h string h math h 等的源代码 我想看看它们是如何创建的 我认为这取决于不同的平台 但 Linux 或 Windows 都会受到欢迎
  • 我如何知道用户在使用 ncurses (Linux) 的控制台中按下了 ESC 键?

    I have a problem in detecting whether I just got a plain ESC key just code 27 or whether it was another special key such
  • 尝试编译 git 但在 linux 中找不到 libcurl

    我想编译支持 http https 的 git 我有 ls usr include curl curlbuild h curl h curlrules h curlver h easy h mprintf h multi h stdchea
  • 对于客户端服务器程序,并行接收多个客户端连接请求的最佳方法是什么?

    该程序是在 Linux 上用 C 语言开发的客户端服务器套接字应用程序 每个客户端都连接到一个远程服务器并将其自身记录为在线 在任何给定时间点很可能有多个客户端在线 所有客户端都尝试连接到服务器以将自己记录为在线 忙碌 空闲等 那么服务器如
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • 在 shell 脚本中将脚本目录更改为用户的 homedir

    在我的 bash 脚本中 我需要将当前目录更改为用户的主目录 如果我想更改为用户的foo主目录 从命令行我可以执行以下操作 cd foo 效果很好 但是当我从script它告诉我 bar sh line 4 cd foo No such f

随机推荐

  • c++智能指针(一)

    C 智能指针 一 c 中的动态内存的管理是通过一对运算符来管理的 new 在动态内存中为对象分 配空间并返回一个指向该对象的指针 我们可以选择对对象进行初始化 delete 接受一个对象的指针 销毁对象 并且释放与之关联的内存 动态内存的使
  • oracle自动增加表空间指定分区

    Create table create table testTable tjsj DATE not null tablespace tablespace1 PARTITION BY RANGE TJSJ INTERVAL NUMTODSIN
  • spring boot(8)-mybatis三种动态sql

    脚本sql XML配置方式的动态SQL我就不讲了 有兴趣可以自己了解 下面是用
  • Qt之QChart各个图表的简单使用(含源码+注释)

    文章目录 一 图表操作示例图 1 图表选择示例 2 动画选项操作 3 图例选项操作 4 其他选项操作 二 QChart 个人理解 三 部分源码讲解 ui中添加动态属性 按钮组的使用 四 源码 CChartTest h CChartTest
  • [1106]python bezier(贝塞尔)曲线

    文章目录 三阶贝塞尔曲线 python bezier曲线 首先简单了解一下什么是贝塞尔曲线 余弦函数曲线我就不多说了哈 贝塞尔曲线又称贝兹曲线 是法国工程师皮埃尔 贝塞尔于1962年发表 贝塞尔曲线广泛应用于二维绘图软件 早期用于汽车车体设
  • 软件测试中单元测试,集成测试,系统测试,验收测试的区别

    软件测试按照研发阶段一般分为5个部分 单元测试 集成测试 确认测试 系统测试 验收测试 下面将不同阶段需要的一些工作内容做一下梳理希望可以帮助到大家 单元测试 是指对软件中的最小可测试单元进行检查和验证 测试方法 白盒测试 单元测试又称为模
  • Vue一键复制功能

    div class item2 2 span 复制 span div copy content let input document createElement input input value content input id crea
  • JavaScript实现搜索功能

    JavaScript实现搜索功能 实现效果 代码如下
  • npm install 卡在了 reify:rxjs: timing reifyNode,出现 gyp ERR find Python、gyp ERR find VS

    前言 最近跑一个vue的项目 第一步肯定是npm install 结果就出现我标题上写的那些情况 经过一番搜索 网上一堆方法尝试了 有说叫你用管理员权限运行 npm install global production windows bui
  • [NISACTF 2022]babyupload

    NISACTF 2022 babyupload 本题考点 python代码审计 os path join 处理路径拼接的问题 做题过程 经典的文件上传页面 F12查看源码
  • SQL-DAY 8(SQL窗口函数的应用案例:电商平台订单信息案例分析)

    文章目录 一 窗口函数说明 1 窗口函数的语句结构 2 窗口函数的分类 二 案例分析 电商平台订单信息 1 数据准备 2 窗口函数之累计计算函数 3 窗口函数之排序函数 3 窗口函数之偏移分析函数 一 窗口函数说明 1 窗口函数的语句结构
  • QT自定义控件设置文本过长时显示点点点……

    有时候有的控件没有文本超大于控件宽度的时候 显示点点点 的属性 即elidetext 这个时候最简单的方法就是自己把文本设置一下 下面上代码 定义elidtText接口 比如自定义QLineEdit控件 追加接口 void CustomLi
  • windows平板找回完整的电源模式,包括高性能模式

    windows平板找回完整的电源模式 包括高性能模式 找回完整的电源模式 可以让你的平板关闭显示屏而不关机 甚至开启高性能模式等等 有这样需求的可以试试 博主是为了让台电X80HD的win8的平板可以关闭显示屏进行运行 从而可以利用其做一台
  • MySQL8.0.12 EXPLAIN EXTENDED 报错问题

    今天测试时发现有一条命令报错 explain EXTENDED SELECT count from OORDER where O CARRIER ID lt 10000 网上的教程都是explain EXTENDED 后来查看官方文档发现e
  • Open3D (C++) 点云随机渲染颜色

    目录 一 概述 二 代码实现 三 结果展示 一 概述 Open3D中颜色的取值范围是 0 0 1 0 C 中的函数rand 可以用来生成随机数 其返回值是整数 要生成0 0 1 0之间的浮点数 必须经过转换 首先生成一个0 N的随机数 再除
  • Hololens入门开发(二)unity项目设置及MR开发包导入

    一 新建一个u3d项目 二 将unity的平台切换为Universal Windows Platform 三 MR开发包导入 开发包链接来自Github 根据需要的版本进行选择 https github com microsoft Mixe
  • Exchange Server 2016 安装部署

    目录 0x01 简介 0x02 环境准备 0x03 添加角色与功能 配置Active Directory 域服务 0x04 安装ExchangeServer 点击 setup 不检查更新 点击 下一步 接受许可 不使用推荐设置 选择邮件角色
  • element-ui 整体替换主题色

    自定义主题 Element 默认提供一套主题 CSS 命名采用 BEM 的风格 方便使用者覆盖样式 我们提供了三种方法 可以进行不同程度的样式自定义 仅替换主题色 如果仅希望更换 Element 的主题色 推荐使用在线主题生成工具 Elem
  • MySQL锁之一:锁详解

    一 什么是死锁 死锁是指两个或两个以上的进程在执行过程中 因争夺资源而造成的一种互相等待的现象 若无外力作用 它们都将无法推进下去 此时称系统处于死锁状态或系统产生了死锁 这些永远在互相等的进程称为死锁进程 二 死锁产生的四个必要条件 互斥
  • Go-cli框架Cobra

    Cobra是前go语言负责人spf13开发的一款go cli框架 可以轻松规范的处理cli应用场景 项目地址 https github com spf13 cobra作者博客 https spf13 com 所谓官网 https cobra