# 支持子命令命令行程序支持包开发 **Repository Path**: wangshj40/master2 ## Basic Information - **Project Name**: 支持子命令命令行程序支持包开发 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-27 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 程序包开发,复杂命令行支持 ## 前言 本程序包主要是模仿 cobra 库的 [command.go](https://github.com/spf13/cobra/blob/master/command.go) 重写了一个 Command.go。目的是方便开发带子命令的命令行程序。 ## 配置 将myCobra包下载到对应的src目录,使用命令 ``` go install gopath/myCObra ``` 然后在需要用到myCobra包的文件中import即可。 ## 项目结构 ![输入图片说明](https://images.gitee.com/uploads/images/2020/1027/152727_3bbd5e53_8018284.png "屏幕截图.png") ## 开始使用 ### 创建根命令 在root.go中定义了一个根命令,cobra.Command是一个结构体,通过命令来执行Run函数。在此根命令中,通过执行Run函数可以打印“Hello World”,若执行时如果有参数name和age则输出有关用户的信息,例如:“User:wsj, a 20 years old student” ```go package cmd import ( "os" "fmt" "github.com/spf13/cobra" //cobra "github.com/user/how5/myCobra" ) var name string var age int var rootCmd = &cobra.Command{ Use: "test", Short: "a test of command", Long: `testing a simple command`, Run: func(cmd *cobra.Command, args []string) { if name != "" && age != 0 { fmt.Println("User: ", name, ", a ", age, " years old student") }else { fmt.Println("Hello World") } }, } func init() { rootCmd.PersistentFlags().StringVarP(&name, "name", "n", "", "user's name") rootCmd.PersistentFlags().IntVarP(&age, "age", "a", 0, "user's age") } func Execute() { if err := rootCmd.Execute(); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } } ``` main.go编写如下,功能仅仅是执行程序 ```go package main import ( "github.com/user/how5/cmd" ) func main() { cmd.Execute() } ``` ![输入图片说明](https://images.gitee.com/uploads/images/2020/1027/153621_59af0a85_8018284.png "屏幕截图.png") ### 创建子命令 在cmd文件夹下新建version.go文件,来查看版本号 ```go package cmd import ( "fmt" //"github.com/spf13/cobra" cobra "github.com/user/how5/myCobra" ) func init() { rootCmd.AddCommand(versionCmd) } var versionCmd = &cobra.Command{ Use: "version", Short: "Print the version number of test", Long: `All software has versions`, Run: func(cmd *cobra.Command, args []string) { fmt.Println("The version is v2.5") }, } ``` 同时在root.go文件中init()函数中加上一行 ```go rootCmd.AddCommand(versionCmd) ``` 现在来执行子命令 ![输入图片说明](https://images.gitee.com/uploads/images/2020/1027/154037_86048c48_8018284.png "屏幕截图.png") ### 用户需要帮助 -h参数 在根命令下加-h参数可以得到有关参数的信息 ![输入图片说明](https://images.gitee.com/uploads/images/2020/1027/154235_68970e5b_8018284.png "屏幕截图.png") 如果想知道子命令的信息则在子命令后加-h参数 ![输入图片说明](https://images.gitee.com/uploads/images/2020/1027/154353_3823e5fe_8018284.png "屏幕截图.png")