go cobra初试
Posted lishuangquan1987
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:命令。通过命令告知程序应该做什么。
示例:
dockerps
dockerimages
dockerbuild
-t tony/mes:v1 .
dockerrun
-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
)
- 监听的ip(例如:
- 日志配置(
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 config
var Config AppConfig
type AppConfig struct
ServeConfig ServeConfig
LogConfig LogConfig
DataBaseConfig DataBaseConfig
type ServeConfig struct
IP string
Port int
type LogConfig struct
Path string
Level string
type DataBaseConfig struct
Type string
ConnnectionStr 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
的为Bool
和BoolP
方法,使用返回值接收Flag的值 BoolVar
和BoolVarP
传入Bool指针赋值到变量,区别是是否支持短名称(-)
开始写代码:
serve.go
:
以上是关于go cobra初试的主要内容,如果未能解决你的问题,请参考以下文章