1.介绍

当我们希望通过命令行启动Golang程序,获取输入的各种形式参数时,该如何处理呢?

2.os.Args

os.Argsgo run main.gomain.exemain.exe
func main() {
	for i ,v := range os.Args {
		fmt.Println(i, v)
	}
}
go run main.go -name korbin aaa bbb ccc
0 C:\Users\Korbin\AppData\Local\Temp\go-build427584346\b001\exe\main.exe
1 -name
2 korbin
3 aaa
4 bbb
5 ccc

3.flag包

flag

3.1 定义flag命令行参数

第一步首先定义命令行参数,有如下三种方式:

flag.String()Bool()Int()flag.Xxx()
ip := flag.Int("name", "korbin", "the author's name")

方法中有三个参数:
name:表示指定的参数名,在命令行中输入为-name或–name
value:表示默认值
usage:参数说明描述

flag.XxxVar()
var name string
flag.StringVar(&name , "name", "korbin", "the author's name")

方法的第一个参数为绑定的变量,传指针;后续参数和上述相同。

flag.Var()Value
flag.Var(&name, "name", "the author's name")

对于这种类型的flag,默认值为该变量类型的初始值,即输入的是int类型则默认为0,string默认为空等。

3.2 flag.Parse()

flag.Parse()
flag.Parse()
cmd --flag=true abc

3.3 使用命令行参数

flag.Args()flag.Arg(i)

完整的示例如下:

package main

import (
	"flag"
	"fmt"
	"os"
)

func main() {
	s := flag.String("name", "korbin", "这是作者的姓名")
	flag.Parse()
	fmt.Println("命令行参数name的值:",*s)
	fmt.Printf("非命令行参数切片:%v", flag.Args())
}
go run main.go -name korbin aaa bbb ccc
命令行参数name的值: korbin
非命令行参数切片:[aaa bbb ccc]