github.com/spf13/pflag使用

使用全局pflag 

获取选项参数

package main

import (
	"fmt"
	"github.com/spf13/pflag"
)

var (
	name string
	age  int
	weight *int
	height *int
)

func init()  {
	// 支持长选项、短选项、默认值和使用文本,并将标志的值绑定到变量。
	pflag.StringVarP(&name, "name", "n","null", "Input Your Name")

	// 支持长选项、默认值和使用文本,并将标志的值绑定到变量。
	pflag.IntVar(&age, "age", 0, "Input Your Age")

	// 支持长选项、默认值和使用文本,并将标志的值存储在指针中
	weight = pflag.Int("weight", 0, "Input Your Weight")

	// 支持长选项、短选项、默认值和使用文本,并将标志的值存储在指针中
	height = pflag.IntP("height", "h", 0, "Input Your Weight")

	// 函数名带Var说明是将标志的值绑定到变量,否则是将标志的值存储在指针中。
	// 函数名带P说明支持短选项,否则不支持短选项。
}

func main()  {
	pflag.Parse()
    // 如果有必须填的参数没有填,打印帮助文档
    if age == 0 || *weight == 0{
		pflag.PrintDefaults()
		return
	}
	fmt.Println(name)
	fmt.Println(age)
	fmt.Println(*weight)
	fmt.Println(*height)
}

运行时指定参数

% go run main.go -n xx --weight 10 -h 20

xx
0
10
20

获取非选项参数

package main

import (
	"fmt"

	"github.com/spf13/pflag"
)

var (
	number = pflag.Int("", 1234, "help message for number")
)

func main() {
	pflag.Parse()

	fmt.Printf("argument number is: %v\n", pflag.NArg())
	fmt.Printf("argument list is: %v\n", pflag.Args())
	fmt.Printf("the first argument is: %v\n", pflag.Arg(0))
	fmt.Println(*number)
}

运行时指定参数

% go run main.go xx yy zz

argument number is: 3
argument list is: [xx yy zz]
the first argument is: xx
1234

指定选项但不指定选项值

package main

import (
	"fmt"
	"github.com/spf13/pflag"
)

var (
	number *int
)

func init()  {
	number = pflag.IntP("number", "n", 1, "help message")
	pflag.Lookup("number").NoOptDefVal = "2"
}

func main() {
	pflag.Parse()
	fmt.Println(*number)
}

运行时指定参数并指定值时number等于指定的值,不指定参数值为默认值1,指定参数但不指定值,如下所示,此时number=2,这种方法要用-n=xx格式赋值,不能使用-n xx格式,更多格式pflag package - github.com/spf13/pflag - pkg.go.dev

% go run main.go -n=10

10

弃用标志或标志的简写

func init()  {
	number = pflag.IntP("number", "n", 1, "help message")
	pflag.Lookup("number").NoOptDefVal = "2"
	_ = pflag.CommandLine.MarkDeprecated("number", "please use --number-my instead")
}

运行时指定参数

% go run main.go -n=10

Flag --number has been deprecated, please use --number-my instead

弃用简写

pflag.CommandLine.MarkShorthandDeprecated("number", "please use --number only")

隐藏标识

将 Flag 标记为隐藏的,这意味着它仍将正常运行,但不会显示在 usage/help 文本中

pflag.CommandLine.MarkHidden("number")

更多

pflag package - github.com/spf13/pflag - pkg.go.dev

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值