命令行风格

参数风格 前导符号 参数名 说明 示例
GNU 风格 -- 字符串 长选项 ls --help
Unix/Posix 风格 - 单字符 短选项,可组合,-a -b 合并成 -ab ls -al
BSD 风格 单字符

介绍

pflag 是标准库 flag 的替代品,支持 GNU 风格和 Unix/Posix 风格。

使用

普通模式

// define
func String(name string, value string, usage string) *string

// example
var username = pflag.String("username", "tom", "Input Your Name")

返回一个对应类型的指针

短选项模式

// define
func StringP(name, shorthand string, value string, usage string) *string 

// example
var password = pflag.StringP("password", "p", "123456", "Input Your Password")

第二个参数是短选项的字符

自定义初始化变量模式

// define
func StringVar(p *string, name string, value string, usage string)

// example
var email string
pflag.StringVar(&email, "email", "colin@gmail.com", "Input Your Email")

自定义初始化变量短选项模式

// define
func StringVarP(p *string, name, shorthand string, value string, usage string)

// example
var sex string
pflag.StringVarP(&sex, "sex", "s", "male", "Input Your Sex")

测试

go run cmd/miniblog/main.go --username xxcheng --password 123 --email xxcheng@xxcheng.cn --sex 男
username:xxcheng,password:123,email:xxcheng@xxcheng.cn,sex:男

go run cmd/miniblog/main.go --username xxcheng -p aaa123 --email xxcheng@xxcheng.cn -s 女
username:xxcheng,password:aaa123,email:xxcheng@xxcheng.cn,sex:女

更多使用

弃用提示 Deprecated

// 普通弃用
_ = pflag.CommandLine.MarkDeprecated("sex", "不要用sex参数了")
_ = pflag.CommandLine.MarkShorthandDeprecated("password", "不要用password短选项了")
// 只弃用短选项
go run cmd/miniblog/main.go --username xxcheng --password 123 --email xxcheng@xxcheng.cn --sex 男
Flag --sex has been deprecated, 不要用sex参数了
username:xxcheng,password:123,email:xxcheng@xxcheng.cn,sex:男


go run cmd/miniblog/main.go --username xxcheng -p aaa123 --email xxcheng@xxcheng.cn -s 女
Flag shorthand -p has been deprecated, 不要用password短选项了
Flag --sex has been deprecated, 不要用sex参数了
username:xxcheng,password:aaa123,email:xxcheng@xxcheng.cn,sex:女

隐藏 help/usage 时的显示

_ = pflag.CommandLine.MarkHidden("password")

参考

文章目录