仿nginx指令行
go語言些指令行程式是不錯的選擇,是以它可以輕松達到如上圖類似nginx指令行的效果
例子
package main
import (
"flag"
"fmt"
"os"
)
//
var (
h bool
v,V bool
t,T bool
q *bool
s string
p string
c string
g string
n int64
)
func init(){
flag.BoolVar(&h,"h",false,"this help")
flag.BoolVar(&v,"v",false,"show version and exit")
flag.BoolVar(&V,"V",false,"show version and configure options then exit")
flag.BoolVar(&t,"t",false,"test configuration and exit")
flag.BoolVar(&T,"T",false,"test configuration,dump it and exit")
//另一中綁定方式
q = flag.Bool("q",false,"suppress non-error messages during configuration testing")
//注意’signal‘,預設是 -S string 有了`signal`之後,變為-s signal
flag.StringVar(&s,"s","","send `signal` to a master")
flag.StringVar(&p,"p","/usr/local/nginx","set configuration `file`")
flag.StringVar(&c,"c","conf/nginx.conf","set confiruration `file`")
flag.StringVar(&g,"g","conf/nginx.conf","set global `directives` out of configuraton file")
flag.Int64Var(&n,"n",0,"set `number`")
//改變預設的usage
flag.Usage=Usage
}
func main() {
flag.Parse()
if h {
flag.Usage()
}
if len(s)!=0{
fmt.Println(s)
}
if n !=0{
fmt.Println(n)
}
}
func Usage() {
fmt.Fprintf(os.Stderr,`nginx version: nginx/1.10.0 Usage:nginx [-hvVtTq] [-n number] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
`)
flag.PrintDefaults()
}
先執行go build或go install 編譯代碼
執行FlagPrac -h 指令就可以輸出幫助資訊了
執行FlagPrac -s wang
Flag 概述
參考:
标準庫—指令行參數解析FLAG兩種定義Flag方式
- Flag.Xxx()
其中Xxx可以是Int,String等;傳回一個相應類型的指針,如:
q = flag.Bool("q",false,"suppress non-error messages during configuration testing")
- Flag.XxxVar()
将flag綁定到一個變量上,如:
flag.BoolVar(&h,"h",false,"this help")
另外還可以建立自定義flag,隻要實作flag.Value接口即可
Flag解析
在所有的flag定義完成之後,可以通過調用flag.Prarse()進行解析,指令行flag的文法有如下三種方式:
- flag //隻支援bool類型
- flag=x
- flag x //隻支援非bool類型
int類型可以是十進制、十六進制、八進制甚至是負數;bool類型可以是1, 0, t, f, true, false, TRUE, FALSE, True, False。Duration可以接受任何time.ParseDuration能解析的類型
類型和函數
ErrHelp:該錯誤類型用于當指令行指定了-help參數但沒有定義時。
Usage:這是一個函數,用于輸出所有定義了的指令行參數和幫助資訊(usage message)。一般,當指令行參數解析出錯時,該函數會被調用。我們可以指定自己的Usage函數,即:flag.Usage = func(){}