golang命令行库cobra使用
github地址:https://github.com/spf13/cobra
Cobra功能
简单子命令cli 如 kubectl verion kubectl get
自动识别-h,--help 帮助
更过参考官方手册:https://github.com/spf13/cobra
kubectl get pod --all-namespaces get代表命令(command) pod代表事务(args) --all-namespaces代表标识(flag),command代表动作,Args代表事务,flags代表动作的修饰符。
使用Cobra
使用cobra需要main.go或和cmd/cmd.go(非固定,根据官方手册说明操作的),来创建需要添加的命令。
cobra不需要构造函数,只需要创建命令即可
rootCmd = &cobra.Command{
Use: "db ",
Short: "test1",
Long: `this is a test123`,
Run: func(cmd *cobra.Command, args []string) {
log.Println(cfgFile, port)
},
} func Execute() {
if err := rootCmd.Execute(); err != nil {
log.Fatal(err)
os.Exit(1)
}
}
还需要在init()方法中定义flag和handle等配置。
func init() {
rootCmd.PersistentFlags().StringVar(&cfgFile, "c", "", "config file (default /etc/php.ini)")
rootCmd.PersistentFlags().IntVar(&port, "p", 3306, "config file (default /etc/php.ini)")
}
创建main.go,在其初始化cobra
package main import "your_app/cmd" func main() {
cmd.Execute()
}
使用flag
标志是args来控制动作command的操作方式的。
Persistent Flags:全局性flag 可用于它所分配的命令以及该命令下的每个命令。在根上分配标志作为全局flag。
Local Flags:局部性flag 在本args分配一个标志,该标志仅适用于该特定命令。
Required flags:必选flag,flag默认是可选的。如果希望命令在未设置flag时报告错误,请将其标记为required
rootCmd.Flags().StringVarP(&cfgFile, "config", "c", "", "config file (require)")
rootCmd.MarkFlagRequired("config")
使用子命令
testCmd = &cobra.Command{
Use: "zhangsan",
Short: "child command",
Long: `this is a child command`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("root > zhangsan")
},
}
rootCmd.AddCommand(testCmd)
golang命令行库cobra使用的更多相关文章
- golang命令行库cobra的使用
简介 Cobra既是一个用来创建强大的现代CLI命令行的golang库,也是一个生成程序应用和命令行文件的程序.下面是Cobra使用的一个演示: Cobra提供的功能 简易的子命令行模式,如 app ...
- Go命令行库Cobra的核心文件root.go
因为docker及Kubernetes都在用cobra库,所以记录一下. 自定义的地方,高红标出. root.go /* Copyright © 2019 NAME HERE <EMAIL AD ...
- Google 开源的 Python 命令行库:深入 fire(一)
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- Google 开源的 Python 命令行库:fire 实现 git 命令
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- golang 命令行cobra妙用
为什么使用命令行 大型项目中少不了数据升级,如果采用web服务,一来不够安全,二来数据量大的时候也会出超时的情况.这时使用命令行是比较合适的方式了. 命令行中的MVC web项目一般采用MVC模式,对 ...
- gocommand:一个跨平台的golang命令行执行package
最近在做一个项目的时候,需要使用golang来调用操作系统中的命令行,来执行shell命令或者直接调用第三方程序,这其中自然就用到了golang自带的exec.Command. 但是如果直接使用原生e ...
- go语言的命令行库
命令行应用通常很小,程序猿们也不喜欢为它编写注释.所以一些额外的工作,如解析参数有个合理的库来帮忙做就好了.https://github.com/urfave/cli 这个项目因此而生.安装:go g ...
- 大家都说好用的 Python 命令行库:click
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- Google 开源的 Python 命令行库:初探 fire
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
随机推荐
- 进程命令(tasklist)
TaskList命令: // 描述: 显示本地或远程计算机上正在运行的进程列表信息. // 语法: tasklist [/s <computer> [ /u [<domain> ...
- SQLServer之创建DML AFTER UPDATE触发器
DML AFTER UPDATE触发器创建原理 触发器触发时,系统自动在内存中创建deleted表或inserted表,inserted表临时保存了插入或更新后的记录行,deleted表临时保存了删除 ...
- LeetCode算法题-Construct the Rectangle(Java实现)
这是悦乐书的第243次更新,第256篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第110题(顺位题号是492).对于Web开发人员,了解如何设计网页的大小非常重要.因此 ...
- 个人对JS原型链的一些理解(prototype、__proto__)
前言 在我一开始学习java web的时候,对JS就一直抱着一种只是简单用用的心态,于是并没有一步一步地去学习,当时认为用法与java类似,但是在实际web项目中使用时却比较麻烦,便直接粗略了解后开始 ...
- 英语口语练习系列-C03-常用问句
连接到英语口语系列总分类 连接到上一章抱怨 枫桥夜泊 How are you doing?你好吗? 美国人见面时候最常用的打招呼方式: "Hey! How are you doing?&qu ...
- Starting sshd: /var/empty/sshd must be owned by root and not group or world-writable.
Starting sshd: /var/empty/sshd must be owned by root and not group or world-writable. [FAILED] ...
- Linux删除隐藏文件
方法2.ls -a 查询隐藏文件 将后缀名为.swp的文件删除 rm -f .nginx.conf.swp 再次编辑文件不在出现提示警告!
- 解析Object.defineProperty的作用
对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值. 定义对象可以使用构造函数或字面量的形式: 除了以上添加属性的方式,还可以使用Object.defineProperty定义新属性 ...
- Mac下的效率工具autojump
(转) IDE 用起来总是得不到满足,Mac 适合搞开发,我也十分喜欢 Mac 系统,当然可以说喜欢 Unix/Linux 系统.今天在 .zshrc 文件中添加了这么几行快捷命令: alias go ...
- 大数据处理框架之Strom:Flume+Kafka+Storm整合
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 storm-0.9 apache-flume-1.6.0 ...