flag什么是命令行参数ls-l-aos.Argsos.Argspackage 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.Argsflagflagflag.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=redcolor总结os.Argsflag