go語言獲取命令列引數
os.Args
這是符合簡單使用的方式,
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Args)
}
編譯后并在命令列中輸入:./args_test par1 par2 par3,會以空格分割,
輸出:[./args_test par1 par2 par3]
// os.Args是一個[]string
os.Args[0] // 是可執行檔案本身
// 其他的元素以os.Args[n]取值
跟明顯,上面這種方式是不能指定引數的,所以這里引入另一種方式:
flag
代碼中使用
flag包支持的命令列引數型別有bool、int、int64、uint、uint64、 float64、string、duration,
| flag | 命令列中輸入值 |
|---|---|
| String | 合法字串 |
| Int、Int64、 Uint、Uint64 | 1234、0664、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用兩種使用方式:
- 1、回傳資料型別的指標,不用自己提前宣告 (如:
flag.String())
格式:變數(指標) := flag.String("引數名字", "默認值", "提示資訊,可以--help顯示")
如:
s := flag.String("name", "lczmx", "輸入名字")
fmt.Println(*s)
- 將自己宣告的指標傳進flag中,不用接收值 (如:
flag.StringVar())
格式:
var 變數
flag.String(&變數,"引數名字", "默認值", "提示資訊,可以--help顯示")
flag.Parse()
// 之后就能操作該變數了
如:
var s string
flag.String(&s, "name", "lczmx", "輸入名字")
flag.Parse()
fmt.Println(s)
注:以上的String可以換成其他型別(Int、Bool、Float64、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() //回傳使用的命令列引數個數
我的github
我的博客
我的筆記
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/9991.html
標籤:Go
