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()
  1. 用于存储命令行参数值的变量的地址;
  2. 命令行参数的名称,可以是一个单字符或多字符名称;
  3. 命令行参数的默认值;
  4. 命令行参数的描述信息。
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