Golang flag包的用法

flag包简介

在 Golang 程序中有很多种方法来处理命令行参数。简单的情况下可以不使用任何库,直接处理 os.Args;其实 Golang 的标准库提供了 flag 包来处理命令行参数;还有第三方提供的处理命令行参数的库,比如 Pflag 等

os.Args实例

package main

import (
	"fmt"
	"os"
)

func main() {
	s := os.Args
	fmt.Printf("s: %v\n", s)
}

运行结果

.\main.exe a b c
s: [main.exe a b c]

os.Args返回一个字符串切片,第一个参数是可执行文件,后面是参数

os.Arg只能处理简单的参数,复杂的参数处理,我们可以使用flag包

使用flag包处理参数

我们先来看一个实例

package main

import (
	"flag"
	"fmt"
)

func main() {
	age := flag.Int("age", 20, "请输入年龄:")
	flag.Parse()
	fmt.Printf("age: %T\n", age)
	fmt.Printf("age: %v\n", *age)
}

运行结果

go run main.go -age 21
age: *int
age: 21

flag有一系列各种数据类型的方法例如,flag.Int解析一个int类型的参数,flag.String解析一个字符串类型的参数。它们有三个参数:

  • 第一个参数是参数名称
  • 第二个参数是默认值
  • 第三个参数是帮助提示信息

这些方法返回的都是指针类型,正如运行结果你看到的*int。所以,获得参数结果使用要使用*age

flag.Parse()方法用来解析参数,如果不调用该方法,参数不会被解析,但是可以获得默认值。你可以注释掉来测试一下。

参数格式

-flag    // 一个中划线
--flag   // 两个中划线
-flag=x	 // 等号
-flag x  // 空格 只能是非布尔类型

查看flag帮助

我们可以编译一下程序获得可以执行文件,在可执行文件后面加 -h 或 -help获得参数帮助。

go build main.go
.\main.exe -help
Usage of main.exe:
  -age int
        请输入年龄: (default 20)
.\main.exe -h   
Usage of main.exe:
  -age int
        请输入年龄: (default 20)

将参数绑定到某个变量

我们也可以直接将参数绑定到某个定义好的变量,使用的方法是xxxVar,例如IntVar

package main

import (
	"flag"
	"fmt"
)

func main() {
	var age int
	flag.IntVar(&age, "age", 20, "请输入一个年龄:")
	flag.Parse()
	fmt.Printf("age: %v\n", age)
}

运行结果:

go run main.go -age 22
age: 22

该方法有四个参数:

  • 第一个绑定的变量,指针类型
  • 第二个参数名称
  • 第三个默认值
  • 第四个帮助提示信息

获得其他命令行参数

如果除了使用flag的方式设置的参数,还有其他命令行参数可以使用flag.Args()flag.Arg(i)flag.NArg()这个几个方法来获得。

flag.Args():返回所有参数,类型是字符串切片

flag.Arg(i):返回单个参数,索引从0开始

flag.NArg():返回参数个数

package main

import (
	"flag"
	"fmt"
)

func main() {
	flag.Int("age", 20, "请输入一个年龄:")
	flag.String("name", "老郭", "请输入一个姓名")
	flag.Parse()

	fmt.Printf("flag.Args(): %v\n", flag.Args())

	for i := 0; i < flag.NArg(); i++ {
		s := flag.Arg(i)
		fmt.Printf("s: %v\n", s)
	}
}

运行结果

go run main.go -age=20 -name=郭宏志 aaa bbb
flag.Args(): [aaa bbb]
s: aaa
s: bbb

你可能感兴趣的:(golang,golang,java,开发语言)