package main
import (
"flag"
"fmt"
"time"
)
//接受一个参数name 值是字符串,默认值是john,-help输出的提示是“输入你的名字”
var cliName = flag.String("name", "John", "输入你的名字")
//接受一个参数age 值是整型,默认值是22,-help输出的提示是“输入你的年龄”
var cliAge = flag.Int("age", 22, "输入你的年龄")
var cliGender = flag.String("gender", "male", "输入你的性别")
//接受一个参数period 值是时间类型,默认值是1s,-help输出的提示是“休眠的时间”
var cliPeriod = flag.Duration("period", 1*time.Second, "休眠的时间")
// 定义一个值类型的命令行参数变量,在 Init() 函数中对其初始化
// 因此,命令行参数对应变量的定义和初始化是可以分开的
var cliFlag int
func Init() {
flag.IntVar(&cliFlag, "flagname", 1234, "必须输入的项")
}
func main() {
// 初始化变量 cliFlag
Init()
var abcd string
flag.StringVar(&abcd, "xincan", "aaaaa", "这里是提示的字符串")
// 把用户传递的命令行参数解析为对应变量的值
flag.Parse()
// flag.Args() 函数返回没有被解析的命令行参数
// func NArg() 函数返回没有被解析的命令行参数的个数
fmt.Printf("args=%s, num=%d\n", flag.Args(), flag.NArg())
for i := 0; i != flag.NArg(); i++ {
fmt.Printf("arg[%d]=%s\n", i, flag.Arg(i))
}
// 输出命令行参数
fmt.Println("name=", *cliName)
fmt.Println("age=", *cliAge)
fmt.Println("gender=", *cliGender)
fmt.Printf("period=", *cliPeriod)
fmt.Println("xincan=", abcd)
fmt.Println(cliFlag)
}
使用flag.Parse()
可以使用-help
参数,输出帮助信息
两种获取参数值的方法
一种:
flag.String("name", "John", "输入你的名字")
flag.Int("age", 22, "输入你的年龄")
这种是有返回值的,返回值是指针,获取的值赋给了第一个参数指针所对应的值,也是通过第一个参数在命令中指定参数
例如,第一个是通过-name
来指定参数,而获取值是通过*name
来获取
另一种:
flag.StringVar(&abcd, "xincan", "aaaaa", "这里是提示的字符串")
flag.IntVar(&cliFlag, "flagname", 1234, "必须输入的项")
这种是没有返回值的,获取的值赋给了第一个参数,而在命令中是通过第二个参数在命令中指定参数
例如,第一个命令中是通过-xincan
来指定参数,而赋的值是通过abcd
来获取
重点:
以上这些获取参数的代码,必须在flag.Parse()
之前,flag.Parse()
意思是把用hi的命令行参数解析为对应的变量
利用help参数来获取帮助
$ go run .\index\doc2db\main.go -help
Usage of C:\Users\xxx\AppData\Local\Temp\go-build327812121\b001\exe\main.exe:
-age int
输入你的年龄 (default 22)
-flagname int
必须输入的项 (default 1234)
-gender string
输入你的性别 (default "male")
-name string
输入你的名字 (default "John")
-period duration
休眠的时间 (default 1s)
-xincan string
这里是提示的字符串 (default "aaaaa")
标签:name,fmt,flag,参数,解析,输入,help
From: https://www.cnblogs.com/hexug/p/16891780.html