os.Agrs 是一个string型的切片, 用于储存所有的命令行参数
如果不传入命令行参数, 则os.Args中只有一个参数 -- 程序本身
func main() {
fmt.Println(len(os.Args)) // 1
for k, v := range os.Args {
fmt.Printf("%d --- %s\n", k, v) // 0 --- example
}
}
输出的结果 'example' 就是此go文件所在的目录名称, 即编译时的目录
向命令行传入两个参数(参数之间以空格分隔), 输出:
3
0 --- example
1 --- d
2 --- d:/test.txt
flag包对命令行的支持
它里面的如下方法, 可以自动解析命令行参数. 只需要设置(调用)这些方法即可
flag.BoolVar()
flag.StringVar()
flag.IntVar()
func main() {
var configPath string // 表示配置文件的路径
var lev int // 表示日志的级别
// 参数1将输入的参数赋值给此变量, 参数2为命令, 参数3为默认值(如果不输参数时使用), 参数4为提示文字
flag.StringVar(&configPath, "p", "defStr", "input config path") // 设置配置
flag.IntVar(&lev, "l", 0, "input log level")
flag.Parse() // 解析命令行参数, 相当于使配置生效
fmt.Println(configPath)
fmt.Println(lev)
}
D:\golang\workspace\project>example.exe -p c:/project/config.ini -l 1 // 输入参数(以 - 命令 开始)
c:/project/config.ini
1
D:\golang\workspace\project>example.exe // 默认值(不输入参数, 将使用这个作为默认的参数)
defStr
0
D:\golang\workspace\project>example.exe -help // -hlep可以查看命令
Usage of example.exe:
-l int
input log level // 提示文字
-p string
input config path (default "defStr")
D:\golang\workspace\project>