这是符合简单使用的方式。html
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Args)
}
编译后并在命令行中输入:./args_test par1 par2 par3
,会以空格分割。
输出:[./args_test par1 par2 par3]
git
// os.Args是一个[]string
os.Args[0] // 是可执行文件自己
// 其余的元素以os.Args[n]取值
跟明显,上面这种方式是不能指定参数的,因此这里引入另外一种方式:github
flag包支持的命令行参数类型有bool、int、int6四、uint、uint6四、 float6四、string、duration。golang
flag | 命令行中输入值 |
---|---|
String | 合法字符串 |
Int、Int6四、 Uint、Uint64 | 123四、066四、0x1234等类型,也能够是负数。 |
Float64 | 合法浮点数 |
Bool | 1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False。 |
Duration | 任何合法的时间段字符串。单位有”ns”、”us” /“µs”、”ms”、”s”、”m”、”h”(如”300ms”、”-1.5h”、”2h45m”) |
flag用两种使用方式:web
flag.String()
)格式:变量(指针) := flag.String("参数名字", "默认值", "提示信息,能够--help显示")
如:markdown
s := flag.String("name", "lczmx", "输入名字")
fmt.Println(*s)
flag.StringVar()
)格式:ui
var 变量
flag.String(&变量,"参数名字", "默认值", "提示信息,能够--help显示")
flag.Parse()
// 以后就能操做该变量了
如:spa
var s string
flag.String(&s, "name", "lczmx", "输入名字")
flag.Parse()
fmt.Println(s)
注:以上的String能够换成其余类型(Int、Bool、Float6四、Duration等)命令行
经过以上两种方法定义好命令行flag参数后,还须要经过调用flag.Parse()来对命令行参数进行解析。指针
完整例子:
package main
import (
"flag"
"fmt"
"time"
)
func main() {
// 第一种方式
isOk := flag.Bool("isOk", false, "你ok吗?")
t := flag.Duration("time", time.Second, "时间")
// 第二种方式
var age int
flag.IntVar(&age, "age", 18, "年龄")
flag.Parse()
fmt.Println("isOk", *isOk)
fmt.Println("time", *t)
fmt.Println("age", age)
}
命令行参数格式有如下几种,能够混用:
./main -age xxx
./main --age xxx
./main -age=xxx
./main --age=xxx
使用help
:(-h、--h、--help、-help),输出:
Usage of /tmp/go-build771233563/b001/exe/main: -age int 年龄 (default 18) -isOk 你ok吗? -time duration 时间 (default 1s) exit status 2
flag.Args() ////返回命令行参数后的其余参数,以[]string类型
flag.NArg() //返回命令行参数后的其余参数个数
flag.NFlag() //返回使用的命令行参数个数