goFlag應用
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.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(){}
相關文章
- 微信小程式、流應用、原生應用app、輕應用微信小程式APP
- 應用
- 使用汽車應用庫構建應用
- 一文搞懂SaaS應用架構:應用服務、應用結構、應用互動設計應用架構
- [應用案例]OT應用案例之dasdig
- SAP BTP MTA 應用的應用場景
- Android應用及應用管理簡介Android
- 《反應式應用開發》之“什麼是反應式應用”
- DOCKER應用Docker
- redis應用Redis
- Canvas應用Canvas
- iptables應用
- 應用安全
- sed 應用
- 應用元件元件
- Web應用Web
- ArryList應用
- erlang應用
- 用 Docker 建立 serverless 應用DockerServer
- 2.3 應用程式容器中的應用程式概述
- 單頁面應用和多頁面應用
- Websphere安裝、企業部署應用 【應用案例】Web
- 應用程式無響應?如何在Mac上強制退出應用Mac
- win10應用商店應用無法安裝怎麼解決_win10應用商店應用安裝沒反應處理方法Win10
- 應用試客打造611“應用狂歡節”助力應用登頂Top1
- golang RPC 應用(1) :net/rpc的應用GolangRPC
- DataGuard之Apply Services(redo應用和SQL應用)APPSQL
- Windbg在應用層除錯漏洞時的應用除錯
- 關於騰訊應用管理中心,認領應用
- 基於應用程度的系統應用優化優化
- Google Play應用商店下架廣告遮蔽類應用Go
- 用 RoadRunner 加速 Laravel 應用Laravel
- 用VIPER構建iOS應用iOS
- 用 Jenkins 部署 PHP 應用JenkinsPHP
- 用“雲”實現SaaS應用
- Sanic 應用配置
- Compose應用
- Restful 應用理解REST