如果使用Go 去构建命令行,无疑cobra 是最常用的库。今天我们通过使用 cobra 命令去快速构建一个命令行的项目。在介绍cobra之前我们简单介绍一下,一个命令的组成如下:
APPNAME Command --Flags Args 或者 APPNAME Command Args --Flags
譬如
go get -u URL
那么go 就是APPNAME 应用名(二级制程序名称)
get 是Command 命令
u 就是flag 标志
URL 就是 Args 参数
回到主题,我们通过cobra 去构建一个命令,首先是 cobra 安装
go get -u github.com/spf13/cobra/cobra
然后我们创建一个go的项目,这个项目就是通过go 做一个计算器。
go mod init my-calc
接下来就是有趣的事情了,cobra 可以帮我们自动生成代码,执行 init 命令
cobra init --pkg-name cobra add add
然后就可以在项目下产生 cmd 如下:
▾ my-calc/
▾ cmd/
root.go
main.go
我们可以查看一个main.go 的内容,执行一个cmd。
package main
import "my-calc/cmd"
func main() {
cmd.Execute()
}
如果我们想给这个命令行加一个 add 的cmd,可以执行
cobra add add
前面一个add 是cobra的cmd,后面一个add 就是我们添加的”加法“ 。我们会看到自动添加add方法
func init() {
rootCmd.AddCommand(addCmd)
接下来就是实现具体add方法,addInt
Run: func(cmd *cobra.Command, args []string) {
addInt(args)
},
addInt 会从args里面获取参数如下
func addInt(args []string) {
var sum int
for _, ival := range args {
itemp, err := strconv.Atoi(ival)
if err != nil {
fmt.Println(err)
}
sum = sum + itemp
}
fmt.Printf("Addition of numbers %s is %d", args, sum)
}
执行的效果如下
如果你想给add 添加一个flag 让它支持 float的加法,可以在上面init 方法里面加一个flag
//add.go
func init() {
rootCmd.AddCommand(addCmd)
addCmd.Flags().BoolP("float", "f", false, "Add Floating Numbers")
}
然后修改一下上面的Run方法
Run: func(cmd *cobra.Command, args []string) {
// 获取flag
fstatus, _ := cmd.Flags().GetBool("float")
if fstatus { // 如果是ture 走 addFloat
addFloat(args)
} else {
addInt(args)
}
},
至于addFloat,我就不粘出来了。这样我们的add 方法就既可以支持init 加法也可以支持float了。效果如下
my-calc add 1.2 2.5 -f
如果我们还想为add 添加一个子命令呢,譬如想实现一个偶数累加器,只将偶数求和
cobra add even
但这个even 方法会追加到 rootcmd里面,这里我们需要手动调整一下。将even 命令加入到addcmd 下面,这样就可以作为add 的子命令了。
// even.go
func init() {
addCmd.AddCommand(evenCmd)
...
}
具体实现如下
// even.go
Run: func(cmd *cobra.Command, args []string) {
var evenSum int
for _, ival := range args {
itemp, _ := strconv.Atoi(ival)
if itemp%2 == 0 {
evenSum = evenSum + itemp
}
}
fmt.Printf("The even addition of %s is %d", args, evenSum)
},
执行的效果如下
其他命令,大家感兴趣可以后续自己追加。
页面更新:2024-02-29
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号