标准库flag
实现了命令行参数的解析。
1 | func main() { |
命令行传参形式:
-flag
-flag=x
-flag x //只支持非布尔类型
其中-
和--
功能是一样的。
子命令的使用1
2
3
4
5
6
7
8
9
10
11
12func main() {
flag.Parse()
// 创建一个带有指定名称和错误处理属性的空命令集
goCmd := flag.NewFlagSet("create", flag.ExitOnError)
goCmd.StringVar(&name, "name", "go", "help")
args := flag.Args()
// 对命令进行解析,否则获取不到name中的值
goCmd.Parse(args[1:])
fmt.Println(name)
}
type Value1
2
3
4
5
6
7// 值是存储在标志中的动态值的接口。
// 对于每个存在的标志,按命令行顺序调用一次Set。
// 可以通过这个接口的方法实现个性化操作
type Value interface {
String() string
Set(string) error
}
如下代码会对传入的参数值末尾加上_value
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25package main
import (
"flag"
"fmt"
)
type Name string
func (n *Name) String() string {
return fmt.Sprint(*n)
}
func (n *Name) Set(value string) error {
*n = Name(value + "_value")
return nil
}
func main() {
var name Name
flag.Var(&name, "name", "help message")
flag.Parse()
fmt.Printf("name is %s",name)
}
// go run flag2.go -name hys
// output: name is hys_value