1. 说明
使用 flag 包获取命令行参数,控制程序执行
主要函数:
flag.String()
flag.StringVar()
flag.Int()
flag.IntVar()
flag.Float64()
flag.Float64Var()
flag.Bool()
flag.BoolVar()
...
http://flag.xxx(p1, p2, p3):
p1:命令行参数标志,flag 包根据该参数解析命令行参数;
p2:默认值。如果程序执行时没有指定该命令行参数,那么命令行参数为该值;
p3:参数说明。通常用于说明该参数作用;
返回值:指针类型。将命令行参数信息存储于内存中,返回指向该内存的指针。比如:flag.String()
将对应的参数存储在内存中,返回值为 *string
指针。
flag.xxxVar(p1, p2, p3, p4):
p1:指针类型,其指向的内存用于存储命令行参数值,比如:flag.StringVar(&s...)
会将对应命令行参数值存储在变量 s
中;
p2:命令行参数标志,flag 包根据该参数解析命令行参数;
p3:默认值。如果程序执行时没有指定该命令行参数,那么命令行参数为该值;
p4:参数说明。通常用于说明该参数作用;
返回值:无。
flag.Parse():
解析传入的命令行参数。
命令行参数指定方式:
-flag=x
-flag x
2. 测试
package main
import (
"fmt"
"flag"
)
func main() {
s := flag.String("n", "sdc", "name") //姓名
i := flag.Int("a", 30, "age") //年龄
f := flag.Float64("s", 1000.0, "salary")//薪资
m := flag.Bool("m", true, "male or female")//性别
flag.Parse() //解析命令行参数
flag.PrintDefaults() //输出帮助信息
fmt.Println(*s, *i, *f, *m)
}
执行:
无命令行参数:(均使用默认值)
./test
-a int
age (default 30)
-m male or female (default true)
-n string
name (default "sdc")
-s float
salary (default 1000)
sdc 30 1000 true
指定部分命令行参数:(未指定的参数使用其默认值)
./test -n "Lucy" -a 27 -m=f
-a int
age (default 30)
-m male or female (default true)
-n string
name (default "sdc")
-s float
salary (default 1000)
Lucy 27 1000 false
指定所有命令行参数:(所有参数使用指定值)
./test -n "Lucy" -a 27 -m=f -s 2000
-a int
age (default 30)
-m male or female (default true)
-n string
name (default "sdc")
-s float
salary (default 1000)
Lucy 27 2000 false
注:
- 向可执行程序传入命令行参数时,需要在参数标志前加
-
。比如对于flag.String("n", "sdc", "name")
,如果向可执行程序传入该参数,那么应输入:./test -n "Lucy"
。 - 指定
bool
类型的参数时,需要使用-flag=x
的方式,不能使用-flag x
的方式。x
支持的值:1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False
。