跳过正文
  1. 文章/
  2. GoLang/
  3. 常用包/
  4. 标准包/

6、flag

·667 字·2 分钟· loading · loading · ·
GoLang 常用包 标准包
GradyYoung
作者
GradyYoung
标准包 - 点击查看当前系列文章
§ 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。

定义参数并解析
#

有两种方法接受参数

  • func (f *FlagSet) [Type](name string, value [Type], usage string) *[Type] :方法返回接收参数的指针
    • Type:要接收参数的类型
    • name:参数名
    • value:默认值
    • usage:使用说明
  • func [Type]Var(p *[Type], name string, value [Type], usage string):方法将参数接收到p中
    • p:接受参数的指针
    • Type:要接收参数的类型
    • name:参数名
    • value:默认值
    • usage:使用说明

注意:定义好参数后,需要使用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 xxx
  • -flag=xxx
  • --flag xxx
  • --flag=xxx

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

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

标准包 - 点击查看当前系列文章
§ 6、flag 「 当前文章 」