這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
最近要做Apache Thrift相關的項目。大概看了一下,覺得不難。Thrift目前已經至此和Go語言了。照著官方提供的一個例子在學。周五搞了一上午,終於編譯通過了。下午去讀例子源碼,發現一個從來沒見過的包——flag。
不管是C開發還是Java,都接觸過命令列開發。像大Java的main函數public static void main(String []args)
直接參數裡面就能讀取到命令列啟動參數。而Go語言的主函數是func main()
果斷啥也沒,需要用這個包。
雖然Go不像大Java,在主函數裡面直接就能擷取到命令列參數,但是Go通過flag包擷取到的參數類型,不像Java那樣,只能是String類型。
再擷取之前,需要自訂要擷取的參數名稱、參數預設值、參數使用方法,還有參數類型。返回的是指標類型。也可以使用函數StringVar
,用處一樣,只是參數表和傳回值的變化。
func String(name string, value string, usage string) *stringfunc StringVar(p *string, name string, value string, usage string)
定義好之後,通過調用flag包的Parse
函數,就會自動解析。完整例子如下testflag.go:
package mainimport ( "flag")var strFlag = flag.String("s", "", "Description")var boolFlag = flag.Bool("bool", false, "Description of flag")func main() { flag.Parse() println(*strFlag, *boolFlag)}
還有一點需要注意的是,Go的命令列參數和大Java對應方式是不同的,預設情況下不能唯寫值,還需要傳入對於值的名稱,也就是前面提到的String
函數的第一個參數。如果定義的是name
,那麼傳的時候就需要加上-name {NAME}
。
運行命令及結果:
$ go run testflag.go -s 123123 false
現在在GitHub上面建立了一個Go語言相關用例的庫,裡面都是平時的測試代碼。從今天開始添加。
https://github.com/mnhkahn/go_code
######參考文獻+ 【1】Package flag - http://golang.org/
原文連結:Golang 處理命令列啟動參數,轉載請註明來源!