6、flag

Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。

Args

用于简单的获取命令行参数

package main

import (
	"fmt"
	"os"
)

func main() {
	// args为[]string
	args := os.Args
	for i, arg := range args {
		fmt.Printf("arg[%d] = %s\n", i, arg)
	}
}
.\main.exe abc def

arg[0] = .\main.exe
arg[1] = abc
arg[2] = def

flag包基本使用

flag包支持的命令行参数类型有bool、int、int64、uint、uint64、float float64、string、duration。

定义参数并解析

有两种方法接受参数

注意:定义好参数后,需要使用flag.Parse()对命令行参数进行解析

程序可以使用-h,查看参数列表

package main

import (
	"flag"
	"fmt"
)

type Stu struct {
	id   string
	name string
	age  int
}

func (s *Stu) String() (str string) {
	return fmt.Sprintf("编号:%s;姓名:%s;年龄:%d", s.id, s.name, s.age)
}

func main() {
	s := new(Stu)
	// 定义参数
	flag.StringVar(&s.id, "id", "A123456", "学生编号")
	flag.StringVar(&s.name, "name", "lucy", "学生姓名")
	flag.IntVar(&s.age, "age", 18, "学生年龄")
	// 执行解析
	flag.Parse()
	fmt.Println(s)
}

支持的命令行参数格式有以下几种:

注意:等号左右不可以有空格;布尔类型的参数必须使用等号的方式-flag=false/--flag=false指定。

Flag解析在第一个非flag参数(单个-不是flag参数)之前停止,或者在终止符--之后停止。