1. 程式人生 > >GOlang中對flag.Prase()的疑問

GOlang中對flag.Prase()的疑問

最近在學習Golang中的flag庫的使用,遇到了如下程式碼:

import "fmt" 
 
var infile *string = flag.String("i", "infile", "File contains values for sorting") 
var outfile *string = flag.String("o", "outfile", "File to receive sorted values") 
var algorithm *string = flag.String("a", "qsort", "Sort algorithm") 
 
func main() {     
	flag.Parse() 
    if infile != nil {
		fmt.Println("infile =", *infile, "outfile =", *outfile, "algorithm =", *algorithm)
	}
} 


其中定義的3句接受引數的變數在flag.Prase()之前,所以我就在疑惑這樣做為什麼可以在呼叫flag.Prase()之後相應的引數會被解析到吶3個變數之上。
在百度、谷歌搜尋了一圈也沒啥進展,於是抱著凡事還得靠自己的心態有自習看了一遍程式碼!
我勒個擦,那3個變數原來是指標型別的變數= =,都怪我第一次沒注意,沒有留意到那個*的存在。
這樣子的我的問題就迎刃而解了,flag.String()方法返回的是儲存日後解析出來的對應引數的值的位置、位置、位置,是一個已經分配好的空間,我們可以用infile這個指標變數來接受這個位置,待日後重新進入main入口進呢人執行flag.Parse()函式之後,這3個位置上就出現了我們傳入的引數(其實在程式初始化期就有預設值),可以使用*infile來訪問具體的內容。
在這裡記下來,凡事都要用心,很簡單的一件事,有時就會因為一個小小的粗心,造成很大的麻煩= =