一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
flag
flag 包支持的命令行参数类型有 bool、int、int64、uint、uint64、float64、string、duration。
| 类型 | 方法 | 返回值 | 备注 |
|---|---|---|---|
| Bool | Bool,BoolVar | *bool,无 | 允许 1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False |
| Int | Int,IntVar | *int,无 | |
| Int64 | Int64,Int64Var | *int64,无 | |
| Uint | Uint,UintVar | *uint,无 | |
| Uint64 | Uint64,Uint64Var | *uint64,无 | |
| Float64 | Float64,Float64Var | *float64,无 | |
| String | String,StringVar | *string,无 | |
| Duration | Duration,DurationVar | *duration,无 |
1. 定义参数
1. 结果保存在指针
语法 flag.类型(参数名, 默认值, 说明信息) *类型,返回一个保存了该 flag 的值的指针,如下,此时 name、age、married、delay 均为对应类型的指针。
name := flag.String("name", "flink", "平台")
parallel := flag.Int("parallel", 5, "并行度")
quit := flag.Bool("quit", false, "静默模式")
delay := flag.Duration("d", 0, "时间间隔")
2. 绑定变量
语法 flag.TypeVar(Type指针, flag名, 默认值, 帮助信息),将 flag 的值保存到相应变量
var name string
var parallel int
var quit bool
var delay time.Duration
flag.StringVar(&name, "name", "flink", "平台")
flag.IntVar(¶llel, "parallel", 5, "并行度")
flag.BoolVar(&quit, "quit", false, "静默模式")
flag.DurationVar(&delay, "d", 0, "时间间隔")
2. 解析参数
1. flag.Parse()
支持的命令行参数格式有以下几种:
-flag: 只支持bool类型-flag=xxx: 支持任何类型-flag xxx: 只支持非bool类型 其中,对于一个或两个-号,效果一样。
flag 解析在第一个非flag参数(单个"-"不是flag参数)之前停止,或者在终止符"–"之后停止。
3. 其他函数
flag.NFlag(): 返回解析时进行了设置的 flag 的数量flag.NArg(): 返回解析 flag 之后剩余参数的个数flag.Args(): 返回解析之后剩下的非 flag 参数,以 []string 类型flag.Args(i): 返回解析之后剩下的第 i 个参数,从 0 开始索引
4. 示例
定义
package main
import (
"fmt"
"flag"
)
func main() {
//定义命令行参数方式1
var name string
var parallel int
var quit bool
var delay time.Duration
flag.StringVar(&name, "name", "flink", "平台")
flag.IntVar(¶llel, "parallel", 5, "并行度")
flag.BoolVar(&quit, "quit", false, "静默模式")
flag.DurationVar(&delay, "d", 0, "时间间隔")
//解析命令行参数
flag.Parse()
fmt.Println(name, parallel, quit, delay)
fmt.Println(flag.NFlag())
fmt.Println(flag.NArg())
fmt.Println(flag.Args())
//fmt.Println(flag.Arg(0))
}
使用
// 方式一
$ ./flag_demo -name spark --parallel 18 -quit=false -d=1h30m
spark 18 false 1h30m0s
4
0
[]
// 方式二
$ ./flag_demo a b c
flink 5 false 0s
0
3
[a b c]
a
帮助提示
$ ./flag_demo -help
Usage of ./flag_demo:
-d duration
时间间隔
-name string
平台 (default "flink")
-parallel int
并行度 (default 5)
-quit
静默模式