1、准备

1.1 资源和文档
  • 库:https://github.com/spf13/cobra
  • 文档:https://github.com/spf13/cobra/blob/master/README.md
1.2 下载

使用 go get命令下载:

go get -u github.com/spf13/cobra

2、使用

2.1 基本使用
  • 在工程中新建cmd文件夹,并添加root命令:在cmd文件夹下新建root.go文件,内容如下:
package cmdimport ("fmt""github.com/spf13/cobra""os"
)var rootCmd = &cobra.Command{Use: "CobraExample",Short: "cobra use example",Long: `An application show how to use cobra library.
Author:roc
Blog:makerinchina.cn`,}func Excute() {if err:= rootCmd.Execute(); err!=nil {fmt.Println(err)os.Exit(1)}
}
  • 然后在main函数中执行,main.go 文件内容如下:
package mainimport "cli_cobra_example/cmd"func main() {cmd.Excute()
}
  • 测试

执行 go build,编译程序,然后执行可以看到如下输出:

An application show how to use cobra library.
Author:roc
Blog:makerinchina.cn
2.2 添加自己的命令

有了第一步的基础后,我们可以添加自己的命令,这里添加一个test命令,执行后输出test提示。

  • 先在cmd文件夹下新建test.go 文件,内容如下:
package cmdimport ("fmt""github.com/spf13/cobra"
)var testCmd = &cobra.Command{Use: "testCmd",Short: "A test cmd",Run: testCmdFunc,
}func testCmdFunc(cmd *cobra.Command, args []string) {fmt.Println("test cmd function execute.")if len(args) > 0 {i := 0for i=0;i<len(args);i++ {fmt.Printf("  args[%d]:%s\r\n", i, args[i])}}
}func init() {rootCmd.AddCommand(testCmd)
}

此时编译后执行程序输出如下:

An application show how to use cobra library.
Author:roc
Blog:makerinchina.cnUsage:CobraExample [command]Available Commands:help        Help about any commandtestCmd     A test cmdFlags:-h, --help   help for CobraExampleUse "CobraExample [command] --help" for more information about a command.

如果执行程序带上命令和参数: app testCmd arg1 arg2, 则输出如下:

test cmd function execute.args[0]:arg1args[1]:arg2
2.3 使用命令标志Flags

(1) 全局命令标志

这种标志定义后会作用于定义它的命令和它的子命令。

  • 在root.go文件添加flags:
package cmdimport ("fmt""github.com/spf13/cobra""os"
)var rootCmd = &cobra.Command{Use: "CobraExample",Short: "cobra use example",Long: `An application show how to use cobra library.
Author:roc
Blog:makerinchina.cn`,Run: func(cmd *cobra.Command, args []string) {fmt.Println("root cmd execute function.")},
}var flags1 stringfunc init() {rootCmd.PersistentFlags().StringVarP(&flags1,"flags1","f","default value","flag defined in rootcmd.")
}func Excute() {if err:= rootCmd.Execute(); err!=nil {fmt.Println(err)os.Exit(1)}
}

执行程序并带 -h 参数输出如下:

An application show how to use cobra library.
Author:roc
Blog:makerinchina.cnUsage:CobraExample [flags]CobraExample [command]Available Commands:help        Help about any commandtestCmd     A test cmdFlags:-f, --flags1 string   flag defined in rootcmd. (default "default value")-h, --help            help for CobraExampleUse "CobraExample [command] --help" for more information about a command.

然后执行程序并带子命令参数: app testCmd -h,也会有-f的标志,输出如下:

A test cmdUsage:CobraExample testCmd [flags]Flags:-h, --help   help for testCmdGlobal Flags:-f, --flags1 string   flag defined in rootcmd. (default "default value")

(2) 特定命令标志

这种标志仅仅用于定义它的命令。

  • 修改test.go文件如下:
package cmdimport ("fmt""github.com/spf13/cobra"
)var testCmd = &cobra.Command{Use: "testCmd",Short: "A test cmd",Run: testCmdFunc,
}var testFlag1 stringfunc testCmdFunc(cmd *cobra.Command, args []string) {fmt.Println("test cmd function execute.")if len(args) > 0 {i := 0for i=0;i<len(args);i++ {fmt.Printf("  args[%d]:%s\r\n", i, args[i])}}strflag, _ := cmd.Flags().GetString("testflag")fmt.Println("local cmd flags:", strflag)strflagroot, _ := rootCmd.Flags().GetString("flags1")fmt.Println("root cmd flags:", strflagroot)
}func init() {rootCmd.AddCommand(testCmd)testCmd.Flags().StringVarP(&testFlag1,"testflag","t","default value1", "test cmd flag1")
}
  • 执行子命令 testCmd:
app testCmd -h

可以看到输出如下:

A test cmdUsage:CobraExample testCmd [flags]Flags:-h, --help              help for testCmd-t, --testflag string   test cmd flag1 (default "default value1")Global Flags:-f, --flags1 string   flag defined in rootcmd. (default "default value")
  • 执行命令并输出标志参数:
app  testCmd arg1 -f global_flag -t local_flag

输出结果如下:

test cmd function execute.args[0]:arg1
local cmd flags: local_flag
root cmd flags: global_flag

golang编程cobra-cli库使用相关推荐

  1. 深入理解Golang 编程思维和工程实战

    | 导语 Golang 的一些编程思维和思想,以及总结一些常见的优雅编程实战技巧 目录 一 Golang 编程思维 二 Golang 高级编码技巧 1 优雅的实现构造函数编程思想 2 优雅的实现继承编 ...

  2. Golang 编程思维和工程实战

    Golang 的一些编程思维和思想,以及总结一些常见的优雅编程实战技巧. 作者:allendbwu,腾讯 PCG 后台开发工程师 一 Golang 编程思维 首先,我们先来看下最基本的,就是 Gola ...

  3. log包在Golang语言的标准库中是怎么使用的?

    Golang 语言的标准库中提供了一个简单的 log 日志包,它不仅提供了很多函数,还定义了一个包含很多方法的类型 Logger.但是它也有缺点,比如不支持区分日志级别,不支持日志文件切割等. 01. ...

  4. 二级c语言编程题只要得出答案,计算机二级C语言考试编程题题库答案.docx

    计算机二级C语言考试编程题题库答案 1.求100之内自然数中最大的能被17整除的数.void main(){ int i;for(i=100;i>0;i--)if(i%17==0)break;p ...

  5. 「编程面试题库」,大佬开发的一款小程序~

    这是一款好朋友zone7公众号号主开发的小程序--「编程面试题库」.涉及不同语言,不同方向,总有一个适合你!值得体验!(以下为作者的原文) 介绍一下这款小程序 咱们这款小程序记录了当前主流语言的一些常 ...

  6. GUI编程与CLI编程

    作为一名多年的iOS开发人员,多次触发我思酌"GUI编程与CLI编程"各自的优劣,尤其是在当我为界面交互花费大占比时间时,时常怀疑自己的工作性质,我终究还是为互联网工作的码农,而不 ...

  7. 树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】

    一.串口说明 莓派3B+上UART串口位于GPIO的8脚和10脚,分别为GPIO8=Tx,GPIO10=Rx.在连接外部接口时,需要交换接口,即GPIO8连接到外设的Rx,GPIO10连接到外设的Tx ...

  8. 问题 | golang编程中的坑

    文章目录 背景 坑一:遍历遇上指针 例子1: 例子2: 为什么? 解决方案 坑二:切片和闭包 例子 为什么 解决方案 坑三:切片的append 例子 为什么 解决方案 坑四:time包自定义格式的坑 ...

  9. CnSeu社工库免费查询_ip代理-golang测试纯真ip库与免费版ipip.net库比较

    ip代理-golang测试纯真ip库与免费版ipip.net库比较 本篇文章主要为使用golang测试国内两款纯真ip数据库与ipip.net免费版数据库进行操作,当输入一个ip地址或域名时可以看到输 ...

  10. XML编程经验――LIBXML2库使用指南

    C++的XML编程经验――LIBXML2库使用指南 写这篇文章的原因有如下几点:1)C++标准库中没有操作XML的方法,用C++操作XML文件必须熟悉一种函数库,LIBXML2是其中一种很优秀的XML ...

最新文章

  1. 【基础练习】【拓扑排序】codevs3294 车站分级题解
  2. sort -k选项详解
  3. word2vec损失函数的数学推导和近似训练以及doc2vec的实战掉包应用
  4. PAT-乙级-1064 朋友数
  5. WPF中的动画——(五)路径动画
  6. saltstack模块 --cp
  7. ios 返回不会自动刷新页面问题
  8. python中str是什么函数_python str函数怎么用
  9. Sargable 与 谓语下推 (predicate pushdown) 简介
  10. MySQL:too many connections
  11. Java讲课笔记29:Swing入门
  12. java第二周的作业
  13. python---django中form组件(1)简单使用和字段了解
  14. Landsat 数据下载与预处理
  15. python3.5中文手册chm_python3官方帮助文档-python3.5.2官方chm参考手册-东坡下载
  16. 实训笔记20190807--数据分析
  17. 通信原理学习笔记5-1:数字调制——脉冲成形滤波器选择(码间串扰、Nyquist准则、升余弦滚降滤波器、眼图)
  18. 自制StartUp宏病毒专杀小工具
  19. Boolean中0与1的转化
  20. windows media player 服务器运行失败

热门文章

  1. 安装 Unity 个人免费版
  2. 一维信号小波去噪算法C语言,[转载]一维小波分解与去噪重构
  3. js对手机号码进行校验
  4. ER/Studio入门操作和配置生成SQL注释(Attribute name)
  5. 白话空间统计二十九:空间插值(二)
  6. Java打印输出:bt磁力天堂
  7. 互联网远程办公 关于公司执行线上办公管理办法
  8. Head First 设计模式总结(六) 命令模式
  9. android app定时提醒,安卓手机上有没有每10分钟间隔定时提醒一次的便签app软件?...
  10. 查找IT行业报告网站