简介
本文讲解如何在go程序中使用命令行参数包pflag来获取gong语言编写的命令行程序的传入参数。
- 命令行参数,形如:
./cmd -a hello --b you
- 命令参数的规范格式如下,详细参考Program Argument Syntax Conventions
--flag // boolean flags, or flags with no option default values
--flag x // only on flags without a default value
--flag=x
使用
- 简单使用
package main
import (
"fmt"
flag "github.com/spf13/pflag"
)
//用法1: 使用指针获取传入参数 --age 122 ,
var age *int = flag.Int("age", 1234, "help message for age")
//用法2: 短参数用法,传入参数 --age1 122 或者 -a 133
var age1 = flag.IntP("age1", "a", 222, "help message")
//用法3: 定义一个变量,使用 flag.IntVar
var flagvar int
var enable* bool= flag.Bool("enable", true, "help message for enable")
func main() {
// 定义了所有的flag之后调用一次 flag.Parse() 对应的flag能够获得值
flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
flag.Parse()
fmt.Println("age:",*age)
fmt.Println("age1",*age1)
fmt.Println("enable:" ,*enable)
}
- 定义flag可以使用
flag.String(), Bool(), Int()
等:
var age *int = flag.Int("age", 1234, "help message for age")
var name *string = flag.String("name", "default name", "help message for name")
var enable * bool= flag.Bool("enable", true, "help message for enable")
- 短参数命令只需要在对应函数后面加一个P即可,第二个参数为对应的短命令,返回值为值本身而不是指针了
var age1 = flag.IntP("age1", "a", 222, "help message")
var name string = flag.StringP("name","n", "default name", "help message for name")
var enable bool= flag.BoolP("enable","e", true, "help message for enable")
- 也可以绑定标志的值给变量,只需用对应的Var函数即可
var flagvar int
func init() {
// 写法1
flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
// 写法2
flag.Var(&flagVal, "name", "help message for flagname")
}
- 配置没有option的flag,如下例子,当存在flag但是没有option的时候值为 NoOptDefVal的时候的值
var ip = flag.IntP("flagname", "f", 1234, "help message")
flag.Lookup("flagname").NoOptDefVal = "4321"
- --flagname=1357 ip=1357
- --flagname ip=4321
- [nothing] ip=1234
使用pflag去支持 Go默认的flags特性
为了支持go语言flag包,go flags需要添加到pflag的flagset。
例如:我们想添加go flags到CommandLine flagset
import (
goflag "flag"
flag "github.com/spf13/pflag"
)
var ip *int = flag.Int("flagname", 1234, "help message for flagname")
func main() {
flag.CommandLine.AddGoFlagSet(goflag.CommandLine)
flag.Parse()
}
网友评论