以太坊源码分析 命令行库 urfave/cli

使用 Go 语言编写命令行程序经常会使用了urfave/cli这个库,比如以太坊软件 geth。

在 C 语言中,我们需要根据 argc/argv 解析命令行参数,调用不同的函数,最后还要写一个 usage() 函数用于打印帮助信息。urfave/cli 把这个过程做了一下封装,抽象出 flag/command/subcommand 这些模块,用户只需要提供一些模块的配置,参数的解析和关联在库内部完成,帮助信息也可以自动生成。

举个例子,我们想要实现下面这个命令行程序:

NAME:
   GoTest - hello world
 
USAGE:
   GoTest [global options] command [command options] [arguments...]
 
VERSION:
   1.2.3
 
COMMANDS:
     help, h  Shows a list of commands or help for one command
   arithmetic:
     add, a  calc 1+1
     sub, s  calc 5-3
   database:
     db  database operations
 
GLOBAL OPTIONS:
   --lang FILE, -l FILE    read from FILE (default: "english")
   --port value, -p value  listening port (default: 8000)
   --help, -h              Help!Help!
   --print-version, -v     print version

1. 基本结构

导入包以后,通过 cli.NewApp() 创建一个实例,然后调用 Run() 方法就实现了一个最基本的命令行程序了。当然,为了让我们的程序干点事情,可以指定一下入口函数app.Action,具体写法如下:

 import (
    "fmt"
    "gopkg.in/urfave/cli.v1"
)
 
func main() {
    app := cli.NewApp()
    app.Action = func(c *cli.Context) error {
        fmt.Println("BOOM!")
        return nil
    }
 
    err := app.Run(os.Args)
    if err != nil {
        log.Fatal(err)
    }
}

2. 公共配置

帮助里需要显示的一些基本信息:

  app.Name = "GoTest"
  app.Usage = "hello world"
  app.Version = "1.2.3"

3. Flag配置

具体对应于帮助中的以下信息:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值