Go 的 flag 包可以解析命令行的参数
来源:互联网 发布:睿智体育0 淘宝店 编辑:程序博客网 时间:2024/05/22 13:11
Go 的 flag 包可以解析命令行的参数。
一、命令行语法
命令行语法主要有以下几种形式:
cmd -flag // 只支持bool类型
cmd -flag=xxx
cmd -flag xxx // 只支持非bool类型
以上语法对于一个或两个‘-’号是一样的,即
cmd -flag xxx (使用空格,一个 - 符号)
cmd --flag xxx (使用空格,两个 - 符号)
cmd -flag=xxx (使用等号,一个 - 符号)
cmd --flag=xxx (使用等号,两个 - 符号)
对于整形 flag,合法的值可以为 1234,0664,0x1234 或 负数 等。对于布尔型 flag,可以为 1,0,t,f,T,F,true,false,TRUE,FALSE,True,False 等
其中,布尔类型的参数比较特殊,为了防止解析时的二义性,应该使用 等号 的方式指定
二、命令行参数方法
1. 定义flag参数
参数有三个:第一个为 参数名称,第二个为 默认值,第三个是 使用说明
1> 通过 flag.String(),Bool(),Int() 等 flag.Xxx() 方法,该种方式返回一个相应的指针
var
ip = flag.Int(
"flagname"
, 1234,
"help message for flagname"
)
2> 通过 flag.XxxVar() 方法将 flag 绑定到一个变量,该种方式返回 值类型,如
var
flagvar int
flag.IntVar(&flagvar,
"flagname"
, 1234,
"help message for flagname"
)
3> 通过 flag.Var() 绑定自定义类型,自定义类型需要实现 Value 接口 (Receiver 必须为指针),如
flag.Var(&flagVal,
"name"
,
"help message for flagname"
)
2. 调用 flag.Parse() 解析命令行参数到定义的 flag
flag.Parse()
解析函数将会在碰到第一个 非flag 命令行参数时停止,非flag 命令行参数是指不满足命令行语法的参数,如命令行参数为 cmd --flag=true abc 则第一个 非flag 命令行参数为“abc”
3. 调用 Parse 解析后,就可以直接使用 flag 本身(指针类型)或者绑定的变量了(值类型)
fmt.Println(
"flagvar has value "
, flagvar)
还可通过 flag.Args(), flag.Arg(i) 来获取 非flag 命令行参数!
三、实例
package
main
import
(
"flag"
"fmt"
)
func
main() {
username := flag.String(
"name"
,
""
,
"Input your username"
)
flag.Parse()
fmt.Println(
"Hello, "
, *username)
}
编译:
go
build flag.
go
运行:
./flag -name=world
输出:
Hello, world
Go 还允许 自定义“命令行参数解析规则”,如下接口所示:
FlagSet 结构:
type
FlagSet
struct
{
Usage
func
()
}
示例:
package
main
import
(
"flag"
"fmt"
)
var
myFlagSet = flag.NewFlagSet(
"myflagset"
, flag.ExitOnError)
var
stringFlag = myFlagSet.String(
"abc"
,
"default value"
,
"help mesage"
)
func
main() {
myFlagSet.Parse([]string{
"-abc"
,
"def"
,
"ghi"
,
"123"
})
args := myFlagSet.Args()
for
i :=
range
args {
fmt.Println(i, myFlagSet.Arg(i))
}
}
- func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet
- func (f *FlagSet) Arg(i int) string
- func (f *FlagSet) Args() []string
- func (f *FlagSet) Bool(name string, value bool, usage string) *bool
- func (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string)
- func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration
- func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string)
- func (f *FlagSet) Float64(name string, value float64, usage string) *float64
- func (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string)
- func (f *FlagSet) Init(name string, errorHandling ErrorHandling)
- func (f *FlagSet) Int(name string, value int, usage string) *int
- func (f *FlagSet) Int64(name string, value int64, usage string) *int64
- func (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string)
- func (f *FlagSet) IntVar(p *int, name string, value int, usage string)
- func (f *FlagSet) Lookup(name string) *Flag
- func (f *FlagSet) NArg() int
- func (f *FlagSet) NFlag() int
- func (f *FlagSet) Parse(arguments []string) error
- func (f *FlagSet) Parsed() bool
- func (f *FlagSet) PrintDefaults()
- func (f *FlagSet) Set(name, value string) error
- func (f *FlagSet) SetOutput(output io.Writer)
- func (f *FlagSet) String(name string, value string, usage string) *string
- func (f *FlagSet) StringVar(p *string, name string, value string, usage string)
- func (f *FlagSet) Uint(name string, value uint, usage string) *uint
- func (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64
- func (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string)
- func (f *FlagSet) UintVar(p *uint, name string, value uint, usage string)
- func (f *FlagSet) Var(value Value, name string, usage string)
- func (f *FlagSet) Visit(fn func(*Flag))
- func (f *FlagSet) VisitAll(fn func(*Flag))
- Go 的 flag 包可以解析命令行的参数
- go flag 包解析命令行参数
- Go 用flag包解析命令行参数
- Go语言的参数解析(flag)
- GO语言flag参数解析
- Golang: 使用flag包进行命令行参数解析
- go flag的使用
- golang flag标准库命令行参数解析
- 命令行参数的解析
- Go解析命令行传入参数
- go语言:flag的使用
- Go语言程序的命令行参数
- Go flag包示例
- Go语言实现的命令行解析程序
- Go语言_flag_Go的命令行参数 /命令行处理
- Python的命令行参数解析
- 命令行解析:flag
- 转:标准库—命令行参数解析flag
- python中set(集合)类型的操作
- lintcode刷题系列:链表排序----归并排序 递归
- Java第一个设计模式----单例设计模式
- ABAP实例:如何设计和使用自定义的权限对象
- 原来python开发后端服务器还可以这么简单(未完成)
- Go 的 flag 包可以解析命令行的参数
- Linux NFS 服务器的安装与配置
- semaphore信号量使用
- 关于js跨域的问题
- PHP-变量(三)(局部变量、全局变量、超全局变量)
- 第6节-Linux补全命令与帮助命令的使用
- 整数的二进制中1的个数
- MySQL性能优化的最佳21条经验
- 关于mysql sum(if)的使用