首页 > 编程语言 >Go 使用 Cobra 构建 CLI 程序

Go 使用 Cobra 构建 CLI 程序

时间:2022-11-18 19:44:49浏览次数:73  
标签:Cobra CLI help cobra go command myapp Go cli

使用 cobra-cli 搭建手脚架

# 安装 cobra-cli
go install github.com/spf13/cobra-cli@latest
# 创建一个应用
mkdir myapp && cd myapp
# 初始化 go mod
go mod init myapp
# 使用 cobra-cli 搭建手脚架
cobra-cli init

注意: cobra-cli 在 go1.18+ 的 go work 模式下有 bug, 不要使用 go work 模式
2022年11月18日的最新版本1.3.0 查看 issue https://github.com/spf13/cobra-cli/issues/26

查看生成的代码

$ tree -L 2
.
├── LICENSE
├── cmd
│   └── root.go
├── go.mod
├── go.sum
└── main.go

测试运行

$ go run main.go 
A longer description that spans multiple lines and likely contains
examples and usage of using your application. 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.

新增命令

cobra-cli add serve
cobra-cli add config

查看新增的命令

$ go run main.go
A longer description that spans multiple lines and likely contains
examples and usage of using your application. 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.

Usage:
  myapp [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  config      A brief description of your command
  help        Help about any command
  serve       A brief description of your command

Flags:
  -h, --help     help for myapp
  -t, --toggle   Help message for toggle

Use "myapp [command] --help" for more information about a command.
$ 

新增 config 命令的子命令

cobra-cli add create -p 'configCmd'

查看新增的子命令

$ go run main.go config --help
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.

Usage:
  myapp config [flags]
  myapp config [command]

Available Commands:
  create      A brief description of your command

Flags:
  -h, --help   help for config

Use "myapp config [command] --help" for more information about a command.
$

填充业务逻辑

image.png

定义 Flags

Flag 有 2 种, Persistent Flag 和 Local Flag, Persistent Flag 可以在此命令和所有的子命令都生效, Local Flag 只是在此命令生效

比如绑定到 rootCmd 的 Persistent Flag 相当于全局 Flag, 所有的命令都能调用

rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output")

但是 Local Flag 只是在当前有效

localCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from")

reference

更多参考

标签:Cobra,CLI,help,cobra,go,command,myapp,Go,cli
From: https://www.cnblogs.com/bmft/p/16904721.html

相关文章

  • OpenGL ES google angle
    目录一.googleangle简介1.ANGLE支持跨平台2.ANGLE支持渲染器3.ANGLE下载地址二.EGL坐标系三.猜你喜欢零基础OpenGLES学习路线推荐:OpenGLES学习......
  • Seata 1.5.2 源码学习(Client端)
    在上一篇中通过阅读Seata服务端的代码,我们了解到TC是如何处理来自客户端的请求的,今天这一篇一起来了解一下客户端是如何处理TC发过来的请求的。要想搞清楚这一点,还得从Glob......
  • 记一次goby-poc的编写
    记一次goby-poc的编写......
  • 【Django Admin】多对多情况下,admin显示与筛选当前账号的数据
    多对多字段:  technology_user=fields.ManyToManyField(to="custom_auth.AdminUser",verbose_name="技术",blank=True,null=True)  放到list_display显示......
  • beego模板变量渲染
    1、结构体渲染user:=User{Id:2,Name:"零度",Age:18,}c.Data["user"]=userHTML部分<h3>结构体渲染</h3><divclass="aa">{{.user.Id}}</div><divclass="a......
  • k8s源码分析2-命令行工具cobra的使用
    本节重点介绍:kubectl的职责和kubectl的代码原理cobra库的使用简介kubectl的职责主要的工作是处理用户提交的东西(包括,命令行参数,yaml文件等)然后其会把用户提交......
  • golang分层测试之http接口测试入门教程
    前言前几话主要讲解关于使用golang进行单元测试,在单元测试的上一层就是接口测试,本节主要讲使用golang进行接口测试,其中主要以http协议的接口测试来讲解golang中的http请......
  • rest_framework_mongoengine实现搜索
    直接只用rest_framework的搜索会不起作用settings'DEFAULT_FILTER_BACKENDS':['rest_framework.filters.SearchFilter',#模糊搜索#'django_......
  • golang http proxy反向代理
    第一种方法后端代码:packagemainimport("io""net/http")funcweb1Func(whttp.ResponseWriter,r*http.Request){io.WriteString(w,"<h1>this......
  • 13.django-admin组件
    Django内置了一个强大的组件叫Admin,提供给网站管理员快速开发运营后台的管理站点,下面通过案例进行操作1.创建模型类模型类如下:fromdjango.dbimportmodels#Crea......