此篇介绍一下Go语言的命令行参数的常用包:os.Args和flag。

os.Args

package main

import (
    "fmt"
    "os"
)

func main () {
    for idx, arg := range os.Args {
        fmt.Println("参数", idx, ":", arg)
    }
}

然后执行go build main.go生成可执行文件:

./main -v 1.0 bbb 222

得到输出:

参数 0 : ./main
参数 1 : -v
参数 2 : 1.0
参数 3 : bbb
参数 4 : 222

os.Args用法说明:

  1. 命令行的第一个参数默认是程序路径本身
  2. os.Args的类型是[]string,也就是字符串切片
  3. os.Args可以用for..range遍历
  4. 可以用len(os.Args)来获取全部参数的数量
  5. 如果不想要输出os.Args的第一个值,可以使用os.Args[1:]

flag

package main
import (
    "fmt"
    "flag"
)

var b = flag.Bool("b", false, "bool类型参数")
var s = flag.String("s", "", "string类型参数")

func main() {
    flag.Parse()
    fmt.Println("-b:", *b)
    fmt.Println("-s:", *s)
    fmt.Println("其他参数:", flag.Args())
}

go run main.go

-b: false
-s:
其他参数: []

go run main.go -b

-b: true
-s:
其他参数: []

go run main.go -b -s test others

-b: true
-s: test
其他参数: [others]

go run main.go -help

Usage of /var/folders/6q/s3nht_hx0bn54d8nx031lfnr0000gn/T/go-build965629684/b001/exe/main:
  -b	bool类型参数
  -s string
    	string类型参数
exit status 2

flag用法说明:

  1. 使用flag包,首先定义待解析的命令行参数,也就是以"-"开头的参数
  2. -help不需要特别指定,可以自动处理
  3. 通过flag.Bool和flag.String,建立了2个指针b和s,分别指向bool类型和string类型的变量,要通过 *b 和 *s 使用变量值
  4. flag.Bool和flag.String的参数有3个,分别是命令行参数名称,默认值,提示字符串
  5. flag使用前,必须先用flag.Parse()解析
  6. 参数中没有能够按照预定义的参数解析的部分,可通过flag.Args()获取,这是一个字符串切片。需要注意的是,从第一个不能解析的参数开始,后面的所有参数都是无法解析的,即使后面的参数中含有预定义的参数
  7. flag.PrintDefaults()可以打印出类似-help的效果
  8. flag.NArg()代表命令行参数的个数
  9. flag.Usage()代表用法说明
  10. 参数也可以这样绑定:

flag.BoolVar(&h, "h", false, "this help")

  1. 命令行语法主要有以下几种形式:
-flag //只支持bool类型
-flag=x
-flag x //只支持非bool类型