当前位置: 首页 > news >正文

go cobra初试

cobra开源地址

https://github.com/spf13/cobra

cobra是什么

Cobra is a library for creating powerful modern CLI applications.

Cobra is used in many Go projects such as Kubernetes, Hugo, and GitHub CLI to name a few. This list contains a more extensive list of projects using Cobra.

cobra是用来创建先进现代化命令行工具的库。k8s/Hugo/Github Cli都是用cobra创建的。

cobra-cli

cobra-cli可以生成对应命令的代码,遵循cobra要求的代码风格和模式。如下的代码示例就是使用cobra-cli来进行的

基本概念

  • Command:命令。通过命令告知程序应该做什么。
    示例:
    docker ps
    docker images
    docker build -t tony/mes:v1 .
    docker run -d -p 10000:1000 tony/mes:v1
    ps/images/build/run均为命令
  • Flag:参数值,字段值。有时候,想让程序干一件事情,光命令是不够的,还需要指定一些参数。这些参数叫做Flag。Flag属于某个命令或者根命令。Flag是对命令的补充,不同的命令下可以有相同的Flag
    示例:
    docker build -t tony/mes:v1
    docker run -d -p 10000:10000
    docker run -d --port 10000:10000
    docker -h
    docker --help
    hugo server --port=1313
    flag通常是-或者--开头,有的有值,有的没有值,是对Command的补充。

上手代码

比如我想写一个API程序,名字叫cobratest,使用命令指定如下功能

  • 启动配置(serve)
    • 监听的ip(例如:--ip=127.0.0.1)
    • 监听port(例如:--port=2000 或者 -p=2000)
  • 日志配置(log)
    • 日志路径(例如:--directory=c:/log 或者 -d=c:/log)
    • 日志级别(例如:-l-evel=trace 或者 -l=trace)
  • 数据库配置(db)
    • 数据库的类型(例如:--type=mysql或者-t=mysql)
    • 连接字符串(例如:--string=xxx或者-s=xxx)
      程序启动起来大概是这样的命令
cobratest serve --ip=0.0.0.0 --port 10000 log --directory=d:/log --level=info db --type=mysql --string=xxx

或者

cobratest serve --ip=0.0.0.0 -p 10000 log -d=d:/log -l=info db -t=mysql -s=xxx

上述有三个cobra中的命令:

  • serve
  • log
  • db

开始撸码

新建一个cobratest文件夹,新建一个main.go文件

初始化go module:

go mod init cobratest

安装cobra-cli

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

确认安装是否,可以输入cobra-cli验证:
在这里插入图片描述

使用cobra-cli初始化go程序

cobra-cli init

在这里插入图片描述
初始化之后,可以看到自动创建了cmd文件夹,并增加了一些代码:

在这里插入图片描述

使用cobra-cli创建命令

如上,需要创建serve/log/db三个Command

cobra-cli add serve
cobra-cli add log
cobra-cli add db

在这里插入图片描述
此时可以看到cmd文件夹增加了三个文件:serve.go/log.go/db.go
在这里插入图片描述

定义接收参数的结构体

新建一个config文件夹,在config文件夹下新建一个config.go文件。文件内容如下:

package configvar Config AppConfigtype AppConfig struct {ServeConfig    ServeConfigLogConfig      LogConfigDataBaseConfig DataBaseConfig
}
type ServeConfig struct {IP   stringPort int
}
type LogConfig struct {Path  stringLevel string
}
type DataBaseConfig struct {Type           stringConnnectionStr string
}

在各命令中接收Flag的值

rootCmd/logCmd/dbCmd/serveCmd都是cobra.Command类型,这个类型有许多方法。举例说明其中几个最重要的方法:
Bool:func (f *FlagSet) Bool(name string, value bool, usage string) *bool
BoolVar:func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string)
BoolP:func (f *FlagSet) BoolP(name, shorthand string, value bool, usage string) *bool
BoolVarP:func BoolVarP(p *bool, name, shorthand string, value bool, usage string)
其中:

  • 返回*bool的为BoolBoolP方法,使用返回值接收Flag的值
  • BoolVarBoolVarP传入Bool指针赋值到变量,区别是是否支持短名称(-)
    开始写代码:
    serve.go:
http://www.lryc.cn/news/20773.html

相关文章:

  • 【react全家桶】 事件处理
  • RabbitMQ交换机(Exchanges)
  • 2023年java初级面试题10道基础试水题
  • 烙铁使用方法
  • golang日期转换、日期增减计算、时间戳转换
  • Android 多种支付方式的优雅实现
  • 算法设计与分析期末考试复习(三)
  • ZCMU--1970: 潜伏者
  • containerd安装配置
  • 随机森林算法(Random Forest)R语言实现
  • 干货 | 八条“黄金规则”解决RF电路寄生信号
  • Java虚拟机之类加载学习总结
  • 基于 vue3、vite、antdv、css 变量实现在线主题色切换
  • “笨办法”学Python 3 ——练习 44 继承和组合
  • 绕过安全狗拦截的SQL注入
  • JAVA练习62-无重复字符的最长子串、最长回文子串
  • 【JavaWeb】复习重点内容
  • 基于粒子群改进的灰色神经网络的时间序列预测,PSO-GNN模型,神经网络案例之20
  • Java中的反射使用
  • urho3d工具
  • HashMap数据结构
  • BFC的含义以及应用
  • 电脑技巧:分享8个Win11系统必备小技巧
  • C/C++每日一练(20230226)
  • Vue 3第二章:Vite文件目录结构及SFC语法
  • Leetcode 剑指 Offer II 016. 不含重复字符的最长子字符串
  • TCP 的演化史-sack 与 reordering metric
  • 【Spring6】| Spring的入门程序、集成Log4j2日志框架
  • 包子凑数(完全背包)
  • Spring超级全家桶,学完绝对是惊艳面试官的程度