此篇介绍一下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用法说明:
- 命令行的第一个参数默认是程序路径本身
- os.Args的类型是[]string,也就是字符串切片
- os.Args可以用for..range遍历
- 可以用len(os.Args)来获取全部参数的数量
- 如果不想要输出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用法说明:
- 使用flag包,首先定义待解析的命令行参数,也就是以"-"开头的参数
- -help不需要特别指定,可以自动处理
- 通过flag.Bool和flag.String,建立了2个指针b和s,分别指向bool类型和string类型的变量,要通过 *b 和 *s 使用变量值
- flag.Bool和flag.String的参数有3个,分别是命令行参数名称,默认值,提示字符串
- flag使用前,必须先用flag.Parse()解析
- 参数中没有能够按照预定义的参数解析的部分,可通过flag.Args()获取,这是一个字符串切片。需要注意的是,从第一个不能解析的参数开始,后面的所有参数都是无法解析的,即使后面的参数中含有预定义的参数
- flag.PrintDefaults()可以打印出类似-help的效果
- flag.NArg()代表命令行参数的个数
- flag.Usage()代表用法说明
- 参数也可以这样绑定:
flag.BoolVar(&h, "h", false, "this help")
- 命令行语法主要有以下几种形式:
-flag //只支持bool类型
-flag=x
-flag x //只支持非bool类型