Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。
用于简单的获取命令行参数
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包支持的命令行参数类型有bool、int、int64、uint、uint64、float float64、string、duration。
有两种方法接受参数
func (f *FlagSet) [Type](name string, value [Type], usage string) *[Type]
:方法返回接收参数的指针
func [Type]Var(p *[Type], name string, value [Type], usage string)
:方法将参数接收到p中
注意:定义好参数后,需要使用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参数)之前停止,或者在终止符--
之后停止。