這是符合簡單使用的方式。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() //返回使用的命令行參數個數