命令行啓動服務的方式,在後端使用很是普遍,若是有寫過C語言的同窗相信不難理解這一點!在C語言中,咱們能夠根據argc和argv來獲取和解析命令行的參數,從而經過不一樣的參數調取不一樣的方法,同時也能夠用Usage來打印幫助信息了。golang
那麼開始今天的話題以前,咱們回顧一下在C語言中是如何解析傳遞的參數的。後端
示例代碼:數組
編譯運行:bash
看完上面的例子,其實咱們能夠發現,上例中是C語言自帶的參數解析,對於簡單的參數構成仍是可使用的。下面咱們再看一下Go語言os標準庫的實現。app
示例代碼:tcp
編譯執行:ide
上例中,咱們能夠看到os.Args返回一個數組,數組裏面是咱們命令行執行時,所傳遞的參數和程序名稱。os自帶的參數獲取,對於簡單的參數來講還能使用,若是參數複雜的狀況下,那麼解析起來就比較費勁的。這個時候,咱們能夠選擇Go語言的flag標準庫來幫咱們處理命令行解析工做。函數
Flag包:https://golang.org/pkg/flag/工具
是Go語言提供的一個標準庫,可以較爲方便和靈活的解析命令行傳遞的參數。ui
flag有兩種方式:
一、flag.Type,其中Type能夠是:int、string、bool,float等類型,返回指針類型。
參數1:flag的名稱
參數2:flag的值,上例中默認值是0
參數3:flag的描述
二、flag.TypeVar,將類型綁定到一個變量上。
參數1:flag的值
參數2:flag的名稱
參數3:flag的值,上例中默認值是0
參數4:flag的描述
示例代碼:
運行結果:
查看幫助:
Flag語法:
Flag解析:
parseOne()函數來處理-flag=value的,若是處理成功後,會將flag存儲到FlagSet.actucal map[string]*Flag中。
flag.Parse()函數來解析命令行中的參數中定義的flag,該方法遇到第一個非flag的命令方法就停止。
一、non-flag的時候,會終止解析工做。
二、連續兩個「-」的時候,會終止解析工做。
而後,再看咱們傳遞錯誤的參數的返回狀況。
跟蹤到代碼中能夠看到如圖:
從上例可見,其實flag並無很是強大,下一章節會介紹一個更強大的命令行解析工具。
總結: