flag
什么是命令行参数ls-l-a
os.Argsos.Args
package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args) }
helloworld
$ go run main.go hello world
输出结果:
[/tmp/go-build3065006307/b001/exe/main hello world]
os.Args
使用flag解析命令行参数os.Argsflag
flagflag.Bool()flag.String()flag.Int()
下面是一个简单的例子,定义了一个布尔型和一个字符串型命令行参数:
package main import ( "flag" "fmt" ) func main() { // 定义命令行参数 var ( isVerbose bool name string ) flag.BoolVar(&isVerbose, "v", false, "verbose") flag.StringVar(&name, "name", "", "name of the user") // 解析命令行参数 flag.Parse() // 输出命令行参数 fmt.Printf("isVerbose=%v, name=%s ", isVerbose, name) }
flag.BoolVar()flag.StringVar()
- 用于存储命令行参数值的变量的地址;
- 命令行参数的名称,可以是一个单字符或多字符名称;
- 命令行参数的默认值;
- 命令行参数的描述信息。
flag.Parse()
-v-name="Alice"
$ go run main.go -v -name=Alice
输出结果:
isVerbose=true, name=Alice
flag
自定义命令行参数flag
例如,我们可以定义一个下拉框类型的命令行参数,让用户从几个选项中选择一个:
package main import ( "fmt" "github.com/AlecAivazis/survey/v2" ) func main() { // 定义下拉框选项 options := []string{"red", "blue", "green"} // 定义命令行参数 var color string prompt := &survey.Select{ Message: "Pick a color:", Options: options, } survey.AskOne(prompt, &color) // 输出命令行参数 fmt.Printf("color=%s ", color) }
github.com/AlecAivazis/survey/v2survey.AskOne()
运行该程序:
$ go run main.go
输出结果:
? Pick a color: ▸ red blue green Answer: red color=red
color
总结os.Argsflag