其实简单的来说,cobra就是一个自定义命令工具,我们经常使用一些命令来构建项目,但是这些命令都是go自带的,你想写自己的命令就可以使用cobra库来试一试。
一,安装
$ go get -u github.com/spf13/cobra
二,简单的cobra项目
先构建一个简单的cobra命令,以此来熟悉cobra是怎么用的
创建一个cmd目录,在目录里创建一个myOrder.go,实际上这个名字可以随便命名,一般来说,你创建的啥命令就写啥名字,这不是为了好找么。
package cmd import ( "fmt" "github.com/spf13/cobra" ) var rootCmd = cobra.Command{ // 命令的名称 Use: "myOrder", // 剪短介绍 Short: "这是一个我的私有命令", // 详细介绍 Long: "自定义私有命令,主要是想测试下这玩意能不能用", // 普通运行,如果需要返回error要使用RUNE Run: func(cmd *cobra.Command, args []string) { fmt.Println("这是一条myOrder命令的反馈,反正啥也没处理") }, } func Execute() { if err := rootCmd.Execute(); err != nil { fmt.Println("这里有错误", err) } }
然后在main.go 入口里运行Execute即可
main.go ↓
package main import "cobraTest/cmd" func main() { cmd.Execute() }
cobraTest是这个项目的名字,cmd是刚才创建的那个包(目录)。
此时是不能直接像往常一样go run的,要先构建为可执行文件,在windows上就是exe
go build
go build之后会发现目录里多出了一个可执行文件,
这时候我们可以进行简单的测试
三,测试
执行可执行文件,并且带上我们刚才的那个命令
.\cobraTest.exe myOrder
这就是刚才写的那个RUN 里面的运行结果
四,增加flag参数
package cmd import ( "fmt" "github.com/spf13/cobra" ) var rootCmd = cobra.Command{ // 命令的名称 Use: "myOrder", // 剪短介绍 Short: "这是一个我的私有命令", // 详细介绍 Long: "自定义私有命令,主要是想测试下这玩意能不能用", // 普通运行,如果需要返回error要使用RUNE Run: func(cmd *cobra.Command, args []string) { fmt.Println("这是一条myOrder命令的反馈,反正啥也没处理") // 读取第一个flag 参数 getString, _ := cmd.Flags().GetString("hahaha") fmt.Println(getString) // 读取第二个flag 参数 getString, _ = cmd.Flags().GetString("heiheihei") fmt.Println(getString) }, } func Execute() { // 增加一个flag 参数 // flag参数的名称,示例值,flag参数解释 rootCmd.PersistentFlags().String("hahaha", "", "随便写点啥吧") // 再增加一个flag 参数 rootCmd.Flags().String("heiheihei", "", "输入一些东西") if err := rootCmd.Execute(); err != nil { fmt.Println("这里有错误", err) } }
在设定完rootCmd后,就可以直接给rootCmd结构体增加flag参数,并在run里面读取出来,修改代码后要重新go build,之后执行命令的时候,加上flag参数
.\cobraTest.exe myOrder --hahaha 哈哈哈 --heiheihei 嘿嘿嘿
五,额外命令
有的文章说这是子命令,其实是不恰当的,这是为了让一个工程可以有多条命令,而无需生成多个可执行文件。
构建两个命令,并在main.go里面写一个根命令
firstOrder.go ↓
package cmd import ( "fmt" "github.com/spf13/cobra" ) // 大写可用于外部访问 var FirstCmd = cobra.Command{ // 命令的名称 Use: "firstOrder", // 剪短介绍 Short: "1号命令", // 普通运行,如果需要返回error要使用RUNE Run: func(cmd *cobra.Command, args []string) { fmt.Println("1号命令可以执行") }, }
secondOrder.go ↓
package cmd import ( "fmt" "github.com/spf13/cobra" ) var SecondCmd = cobra.Command{ // 命令的名称 Use: "secondOrder", // 剪短介绍 Short: "2号命令", // 普通运行,如果需要返回error要使用RUNE Run: func(cmd *cobra.Command, args []string) { fmt.Println("2号命令可以执行") }, }
main.go ↓
package main import ( "cobraTest/cmd" "fmt" "github.com/spf13/cobra" ) func main() { rootCmd := cobra.Command{ Use: "rootOrder", Short: "根命令", TraverseChildren: true, } // 把这两条命令加入到根命令里面 rootCmd.AddCommand(&cmd.FirstCmd) rootCmd.AddCommand(&cmd.SecondCmd) if err := rootCmd.Execute(); err != nil { fmt.Println("Could not run command") } }
执行go build
到此这篇关于Go cobra库使用教程的文章就介绍到这了,更多相关Go cobra内容请搜索好代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好代码网!