Go:flag
目录:
使用os包实现参数传递
package main
import (
"fmt"
"os"
)
func main() {
fmt.Printf("%v\n", os.Args)
fmt.Printf("%T\n", os.Args)
}
执行一下
$ go run main.go why
[/tmp/go-build106941462/b001/exe/main why]
[]string
可以看到os.Args是一个存储命令行参数的字符串切片
flag
更多参考文档
flag支持的命令行参数
类型有bool、int、int64、uint、uint64、float float64、string、duration
flag参数 | 有效值 |
---|---|
字符串 | 合法字符串 |
整数 | 1234,0664,0x1234等,也可以是负数 |
浮点型 | 合法浮点数 |
bool | 1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False |
时间段 | 任何合法的时间段字符串。如300ms 、-1.5h 、2h45m 。合法的单位有ns 、us 、µs 、ms 、s 、m 、h 。 |
flag.Type()
package main
import (
"fmt"
"flag"
)
func main() {
// 创建标志位参数
name := flag.String("name", "why", "请输入名字")
age := flag.Int("age", 26, "请输入年龄")
married := flag.Bool("married", false, "婚否")
delay := flag.Duration("d", 0, "时间间隔")
// 使用flag
flag.Parse()
fmt.Println(*name)
fmt.Println(*age)
fmt.Println(*married)
fmt.Println(*delay)
}
执行一下
$ go run main.go
why
26
false
0s
通过标志位的方式制定参数
$ go run main.go --name "王宏宇"
王宏宇
26
false
0s
支持的命令行参数
-flag xxx
--flag xxx
-flag=xxx
--flag=xxx
也可以通过先创建变量的方式
package main
import (
"fmt"
"flag"
)
func main() {
// 创建标志位参数
var name string
flag.StringVar(&name, "name", "why", "请输入名字")
// 使用flag
flag.Parse()
fmt.Println(name)
}
其他参数
package main
import (
"fmt"
"flag"
)
func main() {
// 创建标志位参数
name := flag.String("name", "why", "请输入名字")
age := flag.Int("age", 26, "请输入年龄")
married := flag.Bool("married", false, "婚否")
delay := flag.Duration("d", 0, "时间间隔")
// 使用flag
flag.Parse()
fmt.Println(*name)
fmt.Println(*age)
fmt.Println(*married)
fmt.Println(*delay)
//返回命令行参数后的其他参数
fmt.Println(flag.Args())
//返回命令行参数后的其他参数个数
fmt.Println(flag.NArg())
//返回使用的命令行参数个数
fmt.Println(flag.NFlag())
}
执行一下
$ go run main.go --name="王宏宇" -age 3 why
王宏宇
3
false
0s
[why]
1
2