Golang flag包

146 阅读2分钟

用法一

package main

import (
	"flag"
	"fmt"
)

func main() {
	host := flag.String("host", "127.0.0.1", "主机地址")
	port := flag.Int("port", 3306, "端口")
	username := flag.String("username", "root", "用户名")
	password := flag.String("password", "111111", "数据库密码")

	// 解析命令行参数变量, 必须写
	flag.Parse()

	fmt.Println(*host)
	fmt.Println(*port)
	fmt.Println(*username)
	fmt.Println(*password)

	// go run main.go -host 192.168.1.5 --port=8090 dev 10 28
	// 命令行的其他非指定参数, 比如说上面的dev, 10, 28都属于
	fmt.Println(flag.Args())

	// 命令行非指定命名参数个数, 比如说上面的dev, 10, 28都属于
	fmt.Println(flag.NArg())

	// 使用的命令行指定的参数个数
	fmt.Println(flag.NFlag())
}
go run main.go -h
# or
go run main.go --help

输出

Usage of C:\Users\ADMINI~1\AppData\Local\Temp\go-build033756430\b001\exe\main.exe:
  -host string
        主机地址 (default "127.0.0.1")
  -password string
        数据库密码 (default "111111")
  -port int
        端口 (default 3306)
  -username string
        用户名 (default "root")

go run main.go 

输出

127.0.0.1
3306
root
111111

go run main.go -host 192.168.1.5 --port=8090

输出

192.168.1.5
8090
root
111111

用法二

package main

import (
	"flag"
	"fmt"
)

func main() {
	var host string
	var port int
	var username string
	var password string

	flag.StringVar(&host,"host", "127.0.0.1", "主机地址")
	flag.IntVar(&port,"port", 3306, "端口")
	flag.StringVar(&username,"username", "root", "用户名")
	flag.StringVar(&password,"password", "111111", "数据库密码")

	// 解析命令行参数变量, 必须写
	flag.Parse()

	fmt.Println(host)
	fmt.Println(port)
	fmt.Println(username)
	fmt.Println(password)

	// go run main.go -host 192.168.1.5 --port=8090 dev 10 28
	// 命令行的其他非指定参数, 比如说上面的dev, 10, 28都属于
	fmt.Println(flag.Args())

	// 命令行非指定命名参数个数, 比如说上面的dev, 10, 28都属于
	fmt.Println(flag.NArg())

	// 使用的命令行指定的参数个数
	fmt.Println(flag.NFlag())
}

时间duration类型

package main

import (
	"flag"
	"fmt"
	"time"
)

func main() {
	/*
		任何合法的时间段字符串。如”300ms”、”-1.5h”、”2h45m”。
		合法的单位有”ns”、”us” /“µs”、”ms”、”s”、”m”、”h”。
	 */
	t := flag.Duration("t", time.Second * 5, "间隔时间")
	flag.Parse()

	fmt.Println(*t)
	fmt.Printf("%T\n", *t)
	fmt.Printf("%#v\n", *t)
}
go run main.go -h

输出

Usage of C:\Users\ADMINI~1\AppData\Local\Temp\go-build079952202\b001\exe\main.exe:
  -t duration
        间隔时间 (default 5s)

go run main.go -t 3h15m7s

输出

3h15m7s
time.Duration
11707000000000