Go语言搬砖 cli命令行工具包

448 阅读2分钟

「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战」。

简介

cli是一个在Go语言中 用于编写命令行工具的库,使用非常简单,可以帮助开发者轻松写出各种小工具

cli官网: github.com/urfave/cli

image.png

安装

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)
   }
}

运行结果:

image.png

帮助命令

cli包自带了一个帮助参数,可以查看当前可 使用的命令和命令参数。。因为当前代码只有一个打印小demo,没有编写命令参数,,所有只有一个help image.png

带命令和参数的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)
   }
}

直接执行该命令行工具,会显示出可以用的 命令,以及命令的别名

image.png

总结

使用cli包可以非常方便,快速的打造属于自已的命令行工具,只要将具体的执行逻辑写到Action: func(c *cli.Context) 里面既可