1、支持子命令命令行程序支持包开发
1.1 概述
命令行实用程序并不是都象 cat、more、grep 是简单命令。go 项目管理程序,类似 java 项目管理 maven、Nodejs
项目管理程序 npm、git 命令行客户端、 docker 与 kubernetes
容器管理工具等等都是采用了较复杂的命令行。即一个实用程序同时支持多个子命令,每个子命令有各自独立的参数,命令之间可能存在共享的代码或逻辑,同时随着产品的发展,这些命令可能发生功能变化、添加新命令等。因此,符合
OCP 原则 的设计是至关重要的编程需求。
1.2 课程任务
- 了解 Cobra包,使用 cobra 命令行生成一个简单的带子命令的命令行程序
- 模仿 cobra.Command 编写一个 myCobra 库
- 将带子命令的命令行处理程序的 import (“github.com/spf13/cobra”) 改为 import (corbra “gitee.com/yourId/yourRepo”)
- 使得命令行处理程序修改代价最小,即可正常运行
任务要求
1、 核心任务,就是模仿 cobra 库的 command.go 重写一个 Command.go
- 仅允许使用的第三方库 flag “github.com/spf13/pflag”
- 可以参考、甚至复制原来的代码
- 必须实现简化版的 type Command struct 定义和方法
- 不一定完全兼容 github.com/spf13/cobra
- 可支持简单带子命令的命令行程序开发
2、包必须包括以下内容:
- 生成的中文 api 文档
- 有较好的 Readme 文件,包括一个简单的使用案例
- 每个go文件必须有对应的测试文件
2、cobra介绍
1、cobra可以生成一个简单的带子命令的命令行程序,原本可以使用go get -u github.com/spf13/cobra
来安装cobra库,但是现在不行了,得用git clone把cobra克隆到本地才能使用,具体命令如下:
git clone https://github.com/spf13/cobra $GOPATH/github.com/spf13/cobra
这样子才能安装并使用cobra库。
2、安装完后,可以使用cobra指令,快速创建新的应用程序:
mkdir -p mainCobra
cd mainCobra
cobra init --pkg-name github.com/userid/mainCobra
但是呢,这里有个比较大的问题,就是我们如果要用cobra创建一个命令行程序,那么它会调用到第三方库viper的内容,所以我们又要按第一步的步骤把viper库克隆到本地使用,结果我们会发现,运行main.ho函数后,报错更多了,因为此处调用的viper库又调用了许多其他的第三方库,要使用就得把它们全部克隆到本地来,很麻烦,所以我们可以不用cobra指令来创建命令行程序。
3、要想不用cobra指令来创建命令行程序,我们需要将main函数与命令行程序的函数放在同一个文件下,一般是与根命令放在一块,如何如果需要添加子命令,就在同一个目录、同一个package main
下添加其他的子命令文件,这样也便于子命令的扩展与使用。
3、简化版cobra
3.1 程序说明
简化版的cobra与之前相比只保留了Use, Short, Long, Run这四大基本功能以及其他的用于辅助的功能,具体可看Command的结构体:
type Command struct {
//Use is the one-line usage message
Use string
//Short is the short decription shown in the 'help' output
Short string
//Long is the long message shown in the 'help<this-command>' output
Long string
//Run: Typically the actual work function. Most commands will only implement this.
Run func(cmd