「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战」。
简介
cli是一个在Go语言中 用于编写命令行工具的库,使用非常简单,可以帮助开发者轻松写出各种小工具
cli官网: github.com/urfave/cli
安装
cli目前有两个版本,v1和v2,这里我们直接用最新的版本(v2)就行
因为是Go的包,提前下载也行,在代码编辑器里面 引入再同步也行
提前下载的话命令如下:
go get github.com/urfave/cli/v2
代码编辑器引入:
import (
"github.com/urfave/cli/v2" // imports as package "cli"
)
使用
编写第一个小dmoe
从命令行接收一个参数,然后打印出来
package main
import (
"fmt"
"github.com/urfave/cli/v2"
"log"
"os"
)
func main() {
app := &cli.App{
Action: func(c *cli.Context) error {
//只接收一个参数,后面的参数全部丢弃
fmt.Printf("Hello %q", c.Args().Get(0))
return nil
},
}
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}
运行结果:
帮助命令
cli包自带了一个帮助参数,可以查看当前可 使用的命令和命令参数。。因为当前代码只有一个打印小demo,没有编写命令参数,,所有只有一个help
带命令和参数的demo
以下示例是一个 带命令以及子命令参数的demo
func main() {
app := &cli.App{
Commands: []*cli.Command{
{
//声明命令的名称
Name: "add",
//声明命令的别名
Aliases: []string{"a"},
//命令的用途
Usage: "增加一个任务",
//具体执行的逻辑,这里就是打印收到的 值
Action: func(c *cli.Context) error {
fmt.Println("增加任务: ", c.Args().First())
return nil
},
},
{
Name: "list",
Aliases: []string{"l"},
Usage: "查看任务列表",
Action: func(c *cli.Context) error {
fmt.Println("任务列表: ", c.Args().First())
return nil
},
},
{
Name: "delete",
Aliases: []string{"d"},
Usage: "删除命令选项",
Subcommands: []*cli.Command{
{
Name: "all",
Usage: "删除全部任务",
Action: func(c *cli.Context) error {
fmt.Println("全部删除已删除 ")
return nil
},
},
{
Name: "one",
Usage: "删除一个任务",
Action: func(c *cli.Context) error {
fmt.Println("删除了任务: ", c.Args().First())
return nil
},
},
},
},
},
}
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}
直接执行该命令行工具,会显示出可以用的 命令,以及命令的别名
总结
使用cli包可以非常方便,快速的打造属于自已的命令行工具,只要将具体的执行逻辑写到Action: func(c *cli.Context) 里面既可