golang urfave/cli包

本文是阅读urfave/cli包官方文档的一些笔记,原文在这里!!

介绍

cli是一个简单、快速、有趣的包,用于在Go中构建命令行应用程序。其目标是使开发人员能够以表达的方式编写快速且可分发的命令行应用程序。

Getting Started

使用非常简单,理论上创建一个cli.App结构的对象,然后调用其Run()方法,传入命令行的参数即可。一个空白的cli应用程序如下:

package main
import (
  "os"
  "github.com/urfave/cli/v2"
)
func main() {
   
  (&cli.App{
   }).Run(os.Args)
}

但是这个空白程序没有什么用处,只会输出一些帮助信息

NAME:
   main - A new cli application
USAGE:
   main [global options] command [command options] [arguments...]
COMMANDS:
   help, h  Shows a list of commands or help for one command
GLOBAL OPTIONS:
   --help, -h  show help (default: false)

在上面空白程序基础上加上执行特定操作的动作

package main
import (
  "fmt"
  "log"
  "os"
  "github.com/urfave/cli/v2"
)
func main() {
   
  app := &cli.App{
   
    Name: "boom",
    Usage: "make an explosive entrance",
    Action: func(c *cli.Context) error {
   
      fmt.Println("boom! I say!")
      return nil
    },
  }
  err := app.Run(os.Args)
  if err != nil {
   
    log.Fatal(err)
  }
}

运行上面的程序会执行Action定义的函数。上面的代码中设置了Name/Usage/ActionNameUsage都显示在帮助中,Action是调用该命令行程序时实际执行的函数,需要的信息可以从参数cli.Context获取。

参数

通过cli.Context的相关方法我们可以获取传给命令行的参数信息:

  • NArg():返回参数个数;
  • Args():返回cli.Args对象,调用其Get(i)获取位置i上的参数。
package main
import (
  "fmt"
  "log"
  "os"
  "github.com/urfave/cli/v2"
)
func main() {
   
  app := &cli.App{
   
    Action: func(c *cli.Context) error {
   
      fmt.Printf("Hello %q\n",context.Args().Get(0))
	  fmt.Printf("The number of arguments:%d\n",context.NArg())
      return nil
    },
  }
  err := app.Run(os.Args)
  if err != nil {
   
    log.Fatal(err)
  }
} 

选项(Flags)

一个好用的命令行程序怎么会少了选项呢?cli设置和获取选项非常简单。在cli.App{}结构初始化时,设置字段Flags即可添加选项。Flags字段是[]cli.Flag类型,cli.Flag实际上是接口类型。cli为常见类型都实现了对应的XxxFlag,如BoolFlag/DurationFlag/StringFlag等。它们有一些共用的字段,Name/Value/Usage(名称/默认值/释义)。看示例:

package ma in
import (
  "fmt"
  "log"
  "os"
  "github.com/urfave/cli/v2"
)
func main() {
   
  app := &cli.App{
   
    Flags: []cli.Flag {
   
      &cli.StringFlag{
   
        Name: "lang",
        Value: "english",
        Usage: "language for the greeting",
      },
    },
    Action: func(c *cli.Context) error {
   
      name := "Nefertiti"
      if c.NArg() > 0 {
   
        name = c.Args().Get(0)
      }
      if c.String("lang") == "spanish" {
   
   
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值