课程任务
- 了解 Cobra包,使用 cobra 命令行生成一个简单的带子命令的命令行程序
- 模仿 cobra.Command 编写一个 myCobra 库
- 将带子命令的命令行处理程序的 import (“github.com/spf13/cobra”) 改为 import (corbra
“gitee.com/yourId/yourRepo”) - 使得命令行处理程序修改代价最小,即可正常运行
了解Cobra包
cobra 的主要功能为提供简易的子命令行模式,如 app server, app fetch 等等
Cobra包hello world
-
获取cobra包
go get -v github.com/spf13/cobra/cobra
-
生成程序
cobra init --pkg-name packagename
这里我用的demo作为程序名,如图
可以看到生成了这几个东西
-
尝试运行
首先为了正常运行,将import的demo/cmd改成了当前文件下的cmd (windows运行的缘故)
然后会发现有些包没有装上,发现装上也没有用,同样报了相同的错误,经过网上到处搜寻还是没有找到解决办法。。
最后发现网上的解决办法都是默认基于module打开的缘故,所以将GO111MODULE设置成off就可以正常运行了。。
-
加个子命令 test
cobra add test
-
再次运行
可以看到available commands下多了个自己写的test分支 -
运行子命令
go run main.go test
至此完成第一个任务的作业,接下来是修改cobra包改成自己的command.go
模仿 cobra.Command 编写一个 myCobra 库
首先观察刚刚生成的程序用到了哪些函数
- test.go (此处test是子命令test)
- Command数据结构
- AddCommand
- root.go
- Command数据结构
- Execute
可以看到核心是command数据结构,所以先搭建command,观察得到test.go中的command用到的有use, short, long, run
所以先把几个加进command中,稍微修改一下后就能跑起来了,底下放测试
测试
首先将两个import改掉,然后注释掉几个没实现的函数,最后尝试运行
结果
如图,重新跑之后是可以跑出如上结果的,实验结束