使用cobra创建cli命令行工具

2023-11-02

什么是cobra?

Cobra既是用于创建强大的现代CLI应用程序的库,也是用于生成应用程序和命令文件的程序。

  • Cobra是一个库,提供了一个简单的界面来创建类似于git&go工具的强大的现代CLI界面。

  • Cobra也是一个应用程序,它将生成您的应用程序支架,以快速开发基于Cobra的应用程序。

Cobra提供:

  • 简单易用的基于子-的CLI: ,app server,app fetch等。
  • 完全符合POSIX标准(包括短版和长版)
  • 嵌套的子命令
  • 全局,本地和级联标志
  • 易产生的应用程序和命令与cobra init appname&cobra add cmdname
  • 智能建议(app srver…你的意思是app server?)
  • 命令和标志的自动帮助生成
  • 自动帮助标志识别-h,–help等等。
  • 为您的应用程序自动生成bash自动完成
  • 为您的应用程序自动生成的手册页
  • 命令别名,以便您可以在不破坏它们的情况下进行更改
  • 定义您自己的帮助,用法等的灵活性。
  • 可选择与viper紧密集成,适用于12因素应用

Cobra建立在命令,参数和标志的结构上。

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

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

如何使用cobra?

  1. 安装

    go get -u github.com/spf13/cobra/cobra
    
    or 在 github.com 目录下执行以下操作
    git clone https://github.com/spf13/cobra.git
    
  2. 初始化项目

    # 在gopath路径下的src目录下执行
    cobra init ‘项目名称(这里假设为test)’	
    
    
    # 该操作会在src目录下创建test目录
      ▾ test/
        ▾ cmd/
            root.go
          main.go
    
  3. 添加命令

    cobra add 命令(这里假设是version)
    # 这时cmd文件夹下会生成一个新的文件version.go,在这个文件中定义这个新的命令的动作。
    

    version.go内容如下:

    import (  
        "fmt"
     
        "github.com/spf13/cobra"
    )
     
    // versionCmd represents the version command
    var versionCmd = &cobra.Command{  
        Use:   "version",		## 命令名称
        Short: "A brief description of your command",		## 命令的简短介绍
        Long: `A longer description that spans multiple lines and likely contains 
    	## 命令详细介绍,可以写出命令的使用例子。    
    examples
    and usage of using your command. For example:
     
    Cobra is a CLI library for Go that empowers applications.  
    This application is a tool to generate the needed files  
    to quickly create a Cobra application.`, 
    	## 使用本命令需要执行的代码写在这里
        Run: func(cmd *cobra.Command, args []string) {
            fmt.Println("version called")		## 这里表示执行test.exe version后执行的代码
        },
    }
     
    func init() {  
        rootCmd.AddCommand(versionCmd)		## 表示为root添加子命令version
     
        // Here you will define your flags and configuration settings.
     
        // Cobra supports Persistent Flags which will work for this command
        // and all subcommands, e.g.:
        // versionCmd.PersistentFlags().String("foo", "", "A help for foo")
     
        // Cobra supports local flags which will only run when this command
        // is called directly, e.g.:
        // versionCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
    }
    

    此时执行以下代码

    > go build -o test
     
    > test -h
     
    Usage:  
      test [command]
     
    Available Commands:  
      help        Help about any command
      version     A brief description of your command
     
    Flags:  
          --config string   config file (default is $HOME/.demo.yaml)
      -h, --help            help for demo
     
    执行新添加的命令
    >test version
    输出:version called
    
  4. 添加flag

    # 在version.go文件的init函数中添加局部flag
    func init() {  
        rootCmd.AddCommand(versionCmd)
        # 添加flag(bool类型)
        versionCmd.Flags().BoolP("isok", "p", false, "flag is ok?")
    }
    

    执行命令,则:

    >test version -h
     
    Usage:  
      test version [flags]
     
    Flags:  
      -h, --help   help for version
      -p, --isok   flag is ok?
     
    Global Flags:  
          --config string   config file (default is $HOME/.demo.yaml)
    
  5. flag赋值

    1. 使用全局flag
      让一个flag对所有命令生效,需要在root.go文件中创建一个变量存储flag值。

      # 1.在root.go 文件中添加一个变量name
      
      var name string
       
      # 2.在init函数中添加全局flag,将flag值存储到变量name中
       
      rootCmd.PersistentFlags().StringVar(&name, "name", "x", "set name")
       
       
      # 3.在子命令version的Run方法中输出name  
      Run: func(cmd *cobra.Command, args []string) {  
          fmt.Println("name is: ", name)
      }
       
       
      # 4.执行命令  
      test version --name wfl
      or
      test version -x wfl
      输出:
      name is:  wfl  
      
    2. 使用局部flag
      让一个flag对某个命令生效,需要在该命令文件中创建一个变量存储flag值。

      # 1.定义变量sunsine  
      var sunshine string
       
       
      # 2.在version.go的init函数中添加flag  
      versionCmd.Flags().StringVarP(&sunshine, "sunshine", "s", false, "you are my sunshine")
       
       
      # 3.在子命令version.go的Run方法中输出  
      Run: func(cmd *cobra.Command, args []string) {  
          fmt.Println("name is: ", name)
          fmt.Println("sunshine is: ", sunshine)
      }
       
       
      # 4.执行命令  
      test version --name wfl --sunshine wfl
      输出:
      name is:  wfl  
      sunshine is:  wfl  
      
    3. 必填flag
      默认情况下,flag是optional(选填),若flag为必填,则需要做如下设置
      如将version命令下的sunshine flag设置为必填

      # 1.init文件中增加flag定义  
      versionCmd.Flags().StringVarP(&sunshine, "sunshine", "s", "", "you are my sunshine")  
      versionCmd.MarkFlagRequired("sunshine")
      
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用cobra创建cli命令行工具 的相关文章

  • signature=f9281a43abd6807852c6bbdc0be5748c,vue-cli-3-ssr/yarn.lock at master · x007xyz/vue-cli-3-ssr...

    cross spawn 64 5 0 1 cross spawn 64 5 1 0 version 34 5 1 0 34 resolved 34 https registry npmjs org cross spawn cross spa
  • Linux下wifi工具wpa_cli使用

    wpa cli使用 扫描查看扫描结果添加network设置SSID选择某个network查看networks使能某个network查询连接情况自动分配IP地址API Demo 扫描 root 64 demo wpa cli i wlan0
  • truffle+ganache-cli构建简单以太坊智能合约并编译部署

    以前接触过以太坊工具链来做区块链练手项目 xff0c 后来荒废了 xff0c 如今再次捡起来 xff0c 算是回忆和加深 之前可能因为网络的原因 xff0c 在truffle各种初始化编译合成智能合约都遇到了好多问题 xff0c 如今再次尝
  • 【Github CLI】Take GitHub to the command line

    目录儿 一 Git Github GitLab二 Github CLI gh2 1 gh简介2 2 gh的使用2 21 Github身份验证 xff08 必选 xff09 2 22 常用命令 xff08 1 xff09 在Github仓库中
  • Vue CLI(脚手架)

    文章目录 一 Vue CLI21 Vue CLI使用前提 xff0c 需要安装NodeJS和Webpack2 Vue CLI的使用3 Vue CLI2详解4 Runtime Compiler和Runtime only的区别5 使用 npm
  • 跨域-Vue-Cli配置代理转发

    目标 xff1a 通过配置vue cli请求代理解决开发环境下的跨域问题 vue cli中集成的跨域解决方案 思路 xff1a 在前端服务和后端接口服务之间 架设一个中间代理服务 xff0c 它的地址保持和前端服务一致 xff0c 那么 x
  • Vue脚手架(Vue-cli)安装

    脚手架是Vue官方提供的标准化开发工具 开发平台 官方文档开始 vue cli cli c command l line 行 interface 命令行接口工具 第一步 仅第一次执行 全局安装 64 vue cli npm install
  • vue报错: npm run serve报错 ‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

    原因 xff1a 该目录下node modules gt bin gt 没有vue cli service文件 这个时候运行npm run serve 或 npm run dev就会报错 加我weixin xff0c 可帮忙解决 做法一 x
  • vue-cli中开发生产css注入形式不同导致bug

    开发环境和生产环境不同导致的差异 主要是css层级有变动 xff1b 开发环境只是单纯的使用了style loader进行style标签插入 xff0c 不进行额外的处理 xff0c 比如说资源合并和添加md5后缀等 xff0c 这样做是为
  • AWS CLI version 2 在 Windows 下的安装

    首先你需要到下面的链接地址中下载需要的应用 xff1a https awscli amazonaws com AWSCLIV2 msi 双击运行 双击运行下载的可以运行的文件 下一步继续 下一步继续安装进程 许可协议 你需要同意许可协议后继
  • BetaFlight模块设计之三十:Cli模块分析

    BetaFlight模块设计之三十 xff1a Cli模块分析 Cli模块Cli接口Cli框架Cli命令结构主要函数分析cliProcess函数processCharacterInteractive函数processCharacter函数
  • sh: 1: vue-cli-service: Permission denied

    看报错日志 xff0c 权限被拒绝 进入node modules bin 34 ll 34 查看一下会发现该文件 vue cli service 34 并没有可执行权限 chmod R 755
  • vue-cli-service Axios 持续返还401

    后端 xff1a 在登录超时或没有登录的情况 xff0c 所有请求都会拒绝并且返还HTTP状态码401 前端 xff1a 前端将认证的Token放到loadStorage中 xff0c 在认证失效时候清空 在接到HTTP状态码为401时 x
  • 开发自己的脚手架(Rollup+Typescript)-(02)-(中间件模式)

    对于A gt b gt c这一类的流程事件 可以采用分解这些事件 当需要用到这些事件操作时 我们将操作插入到核心事件完成所需要的不同步骤中 实现一个流程处理函数 src core ware ts 中间件方法类型 export type Mi
  • 走进 San CLI(上):使用介绍

    本文是 San CLI 的使用和原理的第一篇 主要介绍 San CLI 的初衷和使用 下一篇介绍具体的实现原理 什么是 CLI CLI 是命令行界面 command line interface 的英文缩写 命令行界面是在图形用户界面得到普
  • golang编程cobra-cli库使用

    1 准备 1 1 资源和文档 库 https github com spf13 cobra 文档 https github com spf13 cobra blob master README md 1 2 下载 使用 go get命令下载
  • Go 每日一库之 cobra

    简介 cobra是一个命令行程序库 可以用来编写命令行程序 同时 它也提供了一个脚手架 用于生成基于 cobra 的应用程序框架 非常多知名的开源项目使用了 cobra 库构建命令行 如Kubernetes Hugo etcd等等等等 本文
  • CLI 发行uni-app到微信小程序,如何不打开微信开发者工具去进行小程序发布?

    前言 小程 赶紧把这个UI这里改一下 改完赶紧推个版本 等着测试 哎小程 这个需求客户需要这样改一下 你赶紧改一下推个版本客户等着看 上面这段话相信做开发的同僚或多或少每天都在听 可是小程序的版本发布流程并不像华为云 阿里云等其他云服务器
  • cobra库:基于cobra-cli命令行生成项目结构

    cobra库 基于cobra cli命令行生成项目结构 一 新建go项目 在F盘创建文件夹cobra started 1 使用mod对go项目进行管理 go mod init cobra started 二 使用cobra cli代码生成
  • Mac下 cobra安装

    Mac下 cobra安装 1 配置 bash profile export GOPATH PWD go export GOBIN GOPATH bin export PATH PATH GOBIN 2 在 GOPATH src go get

随机推荐

  • 组态王和plc之间如何建立通讯?

    这两者之间可以有很多种通讯方式 比如 PROFIBUS MPI 以太网 DDE OPC MODBUS 自由口等 主要还是要看你的PLC选型 以及组网方式 现在最常见 也最常用的大概要数RS485 MODBUS协议下的无线通讯方式了 我们假定
  • 中国十大最狠的流氓网站曝光!

    动了流氓软件的发展 谁又从流氓软件中获利 揭开流氓软件背后的始佣者 网易科技独家选出中国十大流氓网站 以下是网易科技评选的十大流氓网站 1 3721 com 中文实名 这个是流氓软件的开山鼻祖 就是因它将中国互联网带入到一个流氓时代 这里就
  • 今日头条2018年校招视频面试过程 一面(编程题两道)

    首先面试官让自我介绍一下 然后问你做过的项目问你擅长的语言 你与其他同学相比的优点 等等 有两道笔试题 1 0 9a z表示36进制 写一个方法计算36进制的和 2 单链表进行反转 附上我写的代码 仅供参考 java代码实现 1 36进制求
  • elementUI 框架组件

    文章目录 elementUI 框架学习笔记 1 创建一个vue cli脚手架 2 Container 布局容器 3 Layout 布局 4 按钮 button 5 链接 6 表单系列 6 1 input 输入框 6 1 1 基础用法 6 1
  • vue 项目中使用 Loading 组件

    当在vue项目中请求后台接口时 常常会使用 loding 过渡数据的加载时间 如果 loading 作为一个全局的加载状态 应该写在项目中的App vue中
  • 大数据项目实战——基于某招聘网站进行数据采集及数据分析(五)

    大数据项目实战 第五章 数据分析 文章目录 大数据项目实战 学习目标 一 设计 Hive 数据仓库 1 事实表 ods jobdata origin 2 维度表 t salary detail 3 维度表 t company detail
  • 15 jQuery Plugins For A Better Photo Gallery And Slideshow

    Photo Gallery picture gallery or slideshow are the best way to showcase your images photos to your readers There are a l
  • 设计原则之组合复用原则的概念及实例代码操作

    场景 例题 教育局的学校管理中包括小学 初中和高中等三个级别老师与学生 不使用组合复用原则的解法 代码实现 采用继承实现 class Person class Teachers extends Person class Students e
  • 基于stm32f1的lora开发基础通信实验

    一 实验条件 环境 win10专业版 keil uv5 串口调试助手 stm32f1系列单片机 as32lora模块 这里是泽耀科技的as32 ttl 100 二 实现功能 1 使用定时器将底层数据通过as32每隔1秒向上层串口发送一段数据
  • 二、RabbitMQ在某商城项目中的使用案例

    一 在对商品增删改查的时候发送消息 在item service中引入amqp依赖
  • 七牛云完整详细配置(从零到一)

    创建存储空间 自定义域名 配置域名的 CNAME 1 复制刚刚新建的域名的CNAME 2 登录域名服务商 这里以阿里云为例 的控制台 添加域名解析 保存后回到七牛存储空间的控制台 可以看到加速域名绑定状态为处理中 最久应该是10分钟 使用七
  • 【Ubuntu】systemd 及其工具

    什么是 systemd systemd 是一个用于管理 Linux 系统启动过程和系统服务的初始化系统 它是现代 Linux 发行版中广泛采用的初始化系统 负责启动和管理操作系统的各个组件 systemd 的设计目标是提高系统启动速度 优化
  • 内网穿透-frp

    frp的作用 1 利用处于内网或防火墙后的机器 对外网环境提供 http 或 https 服务 2 对于 http https 服务支持基于域名的虚拟主机 支持自定义域名绑定 使多个域名可以共用一个80端口 3 利用处于内网或防火墙后的机器
  • Myeclipse10下载,安装,破解,插件,优化介绍(CSDN首发)

    一 Myeclipse10下载与破解 Genuitec公司发布了MyEclipse 10 一款Genuitec旗下的商业化Eclipse集成开发工具的升级版本 MyEclipse 10基于Eclipse Indigo构建 为Java和Jav
  • TOMCAT的SERVER.XML的详细说明

    Example Server Configuration File gt
  • 如何让div靠右_div向右偏移设置 css让div靠右移一定距离

    转自 https www thinkcss com shili 1372 shtml div对象盒子向右偏移设置 使用css让div靠右一定距离 div向右移教程实例篇 div向右偏移一定距离 可采用margin外边距实现 也可以使用pad
  • 史上最全的自动驾驶研究报告(上)

    https www jianshu com p b85a982ad4c8 自动驾驶是百年汽车工业史上又一次伟大的范式转移 将重新定义汽车产业规则 汽车的产品定义将不再是 行走的精密仪器 也不只是一台 行走的计算机 而是 行走的第三空间 车厂
  • RAM明明断电会丢失数据,为什么初始化的全局变量存储在RAM?详细分析程序的存储

    前言 1 之前因为一个字符指针和字符数组指针引发的bug 折磨了我一个下午才发现问题 之后我就打算研究一下系统是如何发现野指针乱访问问题 后面就一直深入到微机系统中的内存管理了 2 这些其实都是基础知识 只不过我一直不太明白 所以在此记录一
  • Flink架构

    1 Flink 任务提交流程 TaskManager是一个独立的jvm进程 每个task slot表示TaskManager拥有资源的一个固定大小的子集 假如一个TaskManager有三个slot 那么它会将其管理的内存分成三份给各个sl
  • 使用cobra创建cli命令行工具

    什么是cobra Cobra既是用于创建强大的现代CLI应用程序的库 也是用于生成应用程序和命令文件的程序 Cobra是一个库 提供了一个简单的界面来创建类似于git go工具的强大的现代CLI界面 Cobra也是一个应用程序 它将生成您的