go语言之支持子命令命令行程序包开发

本文介绍了如何使用Go语言开发支持子命令的命令行程序。通过学习 Cobra 库,理解其实现原理,创建了一个简化版的 Cobra,支持基本功能如Use, Short, Long, Run等。此外,文章还提供了简化版 Cobra 的程序结构和主要函数的说明,并包含了单元测试和功能测试的执行方法。" 86064327,5654623,NetBeans IDE 快捷键大全:提升代码编写效率,"['IDE', 'Java开发', 'NetBeans', '编程效率']
摘要由CSDN通过智能技术生成

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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值