http://blog.csdn.net/delphiwcdj/article/details/17202347
Go語(yǔ)言通過(guò)使用標(biāo)準(zhǔn)庫(kù)里的flag包來(lái)處理命令行參數(shù)。
Package flag implements command-line flag parsing.
http://golang.org/pkg/flag/
http://golang.org/pkg/
幾點(diǎn)注意事項(xiàng):
1,通過(guò)flag.String(), Bool(), Int()等方式來(lái)定義命令行中需要使用的flag。
2,在定義完flag后,通過(guò)調(diào)用flag.Parse()來(lái)進(jìn)行對(duì)命令行參數(shù)的解析。
3,命令行參數(shù)的格式可以是:
-flag xxx (使用空格,一個(gè) - 符號(hào))
--flag xxx (使用空格,兩個(gè) - 符號(hào))
-flag=xxx (使用等號(hào),一個(gè) - 符號(hào))
--flag=xxx (使用等號(hào),兩個(gè) - 符號(hào))
其中,布爾類型的參數(shù)防止解析時(shí)的二義性,應(yīng)該使用等號(hào)的方式指定。
測(cè)試用例:
- 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
- */
參考:
標(biāo)準(zhǔn)庫(kù)—命令行參數(shù)解析flag
http://www.01happy.com/golang-command-line-arguments/
部署golang項(xiàng)目時(shí)難免要通過(guò)命令行來(lái)設(shè)置一些參數(shù),那么在golang中如何操作命令行參數(shù)呢?可以使用os庫(kù)和flag庫(kù)。
golang os庫(kù)獲取命令行參數(shù)
os可以通過(guò)變量Args來(lái)獲取命令參數(shù),os.Args返回一個(gè)字符串?dāng)?shù)組,其中第一個(gè)參數(shù)就是執(zhí)行文件本身。
1 2 3 4 5 6 7 8 9 10 | package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Args)
}
|
編譯執(zhí)行后執(zhí)行
$ ./cmd -user="root" [./cmd -user=root]
這種方式操作起來(lái)要自己封裝,比較費(fèi)時(shí)費(fèi)勁。golang提供了flag庫(kù),可以很方便的操作命名行參數(shù),下面介紹下flag的用法。
golang flag獲取命令行參數(shù)
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() // 這一句至關(guān)重要!!必須先解析才能拿到參數(shù)值
fmt.Println( "ok:" , *ok)
fmt.Println( "id:" , *id)
fmt.Println( "port:" , *port)
fmt.Println( "name:" , name)
}
|
像flag.Int、flag.Bool、flag.String這樣的函數(shù)格式都是一樣的,第一個(gè)參數(shù)表示參數(shù)名稱,第二個(gè)參數(shù)表示默認(rèn)值,第三個(gè)參數(shù)表示使用說(shuō)明和描述。flag.StringVar這樣的函數(shù)第一個(gè)參數(shù)換成了變量地址,后面的參數(shù)和flag.String是一樣的。
使用flag來(lái)操作命令行參數(shù),支持的格式如下:
-id=1 --id=1 -id 1 --id 1
還是非常方便的。
執(zhí)行一下:
$ go run flag.go -id=2 -name="golang" ok: false id: 2 port: :8080 name: golang
使用-h參數(shù)可以查看使用幫助:
$ 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
思月行云 閱讀(1884)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
Golang