http://blog.csdn.net/delphiwcdj/article/details/17202347
Go語言通過使用標準庫里的flag包來處理命令行參數。
Package flag implements command-line flag parsing.
http://golang.org/pkg/flag/
http://golang.org/pkg/
幾點注意事項:
1,通過flag.String(), Bool(), Int()等方式來定義命令行中需要使用的flag。
2,在定義完flag后,通過調用flag.Parse()來進行對命令行參數的解析。
3,命令行參數的格式可以是:
-flag xxx (使用空格,一個 - 符號)
--flag xxx (使用空格,兩個 - 符號)
-flag=xxx (使用等號,一個 - 符號)
--flag=xxx (使用等號,兩個 - 符號)
其中,布爾類型的參數防止解析時的二義性,應該使用等號的方式指定。
測試用例:
- package main
-
- import (
- "flag"
- "fmt"
- )
-
- var Input_pstrName = flag.String("name", "gerry", "input ur name")
- var Input_piAge = flag.Int("age", 20, "input ur age")
- var Input_flagvar int
-
- func Init() {
- flag.IntVar(&Input_flagvar, "flagname", 1234, "help message for flagname")
- }
-
- func main() {
- Init()
- flag.Parse()
-
- // After parsing, the arguments after the flag are available as the slice flag.Args() or individually as flag.Arg(i). The arguments are indexed from 0 through flag.NArg()-1
- // Args returns the non-flag command-line arguments
- // NArg is the number of arguments remaining after flags have been processed
- 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=", *Input_pstrName)
- fmt.Println("age=", *Input_piAge)
- fmt.Println("flagname=", Input_flagvar)
- }
-
- /*
- output:
- mba:filter gerryyang$ ./test_flag --name "aaa" -age=123 -flagname=0x11 para1 para2 para3
- args=[para1 para2 para3], num=3
- arg[0]=para1
- arg[1]=para2
- arg[2]=para3
- name= aaa
- age= 123
- flagname= 17
- */
參考:
標準庫—命令行參數解析flag
http://www.01happy.com/golang-command-line-arguments/
部署golang項目時難免要通過命令行來設置一些參數,那么在golang中如何操作命令行參數呢?可以使用os庫和flag庫。
golang os庫獲取命令行參數
os可以通過變量Args來獲取命令參數,os.Args返回一個字符串數組,其中第一個參數就是執行文件本身。
1 2 3 4 5 6 7 8 9 10 | package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Args)
}
|
編譯執行后執行
$ ./cmd -user="root" [./cmd -user=root]
這種方式操作起來要自己封裝,比較費時費勁。golang提供了flag庫,可以很方便的操作命名行參數,下面介紹下flag的用法。
golang flag獲取命令行參數
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package main
import (
"flag"
"fmt"
)
func main() {
ok := flag.Bool( "ok" , false, "is ok" )
id := flag.Int( "id" , 0 , "id" )
port := flag.String( "port" , ":8080" , "http listen port" )
var name string
flag.StringVar(&name, "name" , "123" , "name" )
flag.Parse() // 這一句至關重要!!必須先解析才能拿到參數值
fmt.Println( "ok:" , *ok)
fmt.Println( "id:" , *id)
fmt.Println( "port:" , *port)
fmt.Println( "name:" , name)
}
|
像flag.Int、flag.Bool、flag.String這樣的函數格式都是一樣的,第一個參數表示參數名稱,第二個參數表示默認值,第三個參數表示使用說明和描述。flag.StringVar這樣的函數第一個參數換成了變量地址,后面的參數和flag.String是一樣的。
使用flag來操作命令行參數,支持的格式如下:
-id=1 --id=1 -id 1 --id 1
還是非常方便的。
執行一下:
$ go run flag.go -id=2 -name="golang" ok: false id: 2 port: :8080 name: golang
使用-h參數可以查看使用幫助:
$ go run flag.go -h -id=0: id -name="123": name -ok=false: is ok -port=":8080": http listen port
posted on 2017-06-21 11:52
思月行云 閱讀(1872)
評論(0) 編輯 收藏 引用 所屬分類:
Golang