本站总访问量 pflag-flag库的直接替代 - Jerry的小站

Jerry Gao

上帝就是真理,真理就是上帝

为什么要使用pflag

Golang是一门性能十分强大语言。当我们在用Golang开发一个命令行程序的时候,我们经常会用到官方的flag库,但是官方的flag库使用并编译运行过后,你会发现它与我们经常使用的POSIX/GNU风格的命令行程序有所不同。比如说:

1
2
3
4
5
6
7
8
>>> go run artifact.go -h
Usage of /var/folders/m7/gkmw5fms7qq62k2ft42_ts1c0000gn/T/go-build280567700/b001/exe/artifact:
-conn string
连接器名称,多个连接器以逗号分隔
-cookie string
携带的cookie,用来做身份验证 (default "xxxxxx")
-delete
删除旧的压缩包 (default true)

我们开发了一个名为artifact的命令行程序,运行go run artifact.go -h打印帮助信息,我们会发现,不同的flag为-flag,而不是--flag并且提供一个较短的别名如-f以供我们快速输入。

那么当我们使用了pflag之后,帮助信息就会变成这个样子:

1
2
3
4
>>> go run artifact.go -h
Usage of /var/folders/m7/gkmw5fms7qq62k2ft42_ts1c0000gn/T/go-build1444358319/b001/exe/artifact:
--conn string 连接器名称,多个连接器以逗号分隔
--cookie string 携带的cookie,用来做身份验证 (default "xxxxx")

可以看到,它已经是POSIX/GNU风格的命令行程序了。

怎么用

使用方式其实很简单,因为pflag是flag的直接替换包,我们只需要将import "flag"直接替换为flag "github.com/spf13/pflag"

在替换之前,我们需要先安装pflag这个包,在命令行运行:

1
go get github.com/spf13/pflag

要进行测试,可以使用:

1
go test github.com/spf13/pflag

上面的命令行程序我们并没有使用pflag为不同的选项提供一个shorthands,直接替换后,我们可以使用如

1
flag.StringVarP(&cookie, "cookie", "c", "xxxx", "携带的cookie,用来做身份验证")

来直接为cookie提供一个-c的shorthands,效果为:

1
2
3
4
>>> go run artifact.go -h
Usage of /var/folders/m7/gkmw5fms7qq62k2ft42_ts1c0000gn/T/go-build3700657530/b001/exe/artifact:
--conn string 连接器名称,多个连接器以逗号分隔
-c, --cookie string 携带的cookie,用来做身份验证 (default "xxxxx")

评论