我目前正在閱讀一本關(guān)于 Go 的書,并看到了以下腳本:package mainimport ( "flag" "fmt" "log" "os" "path/filepath" "runtime" "strings")func main() { runtime.GOMAXPROCS(runtime.NumCPU()) // Use all the machine's cores log.SetFlags(0) algorithm, minSize, maxSize, suffixes, files := handleCommandLine() if algorithm == 1 { sink(filterSize(minSize, maxSize, filterSuffixes(suffixes, source(files)))) } else { channel1 := source(files) channel2 := filterSuffixes(suffixes, channel1) channel3 := filterSize(minSize, maxSize, channel2) sink(channel3) }}func handleCommandLine() (algorithm int, minSize, maxSize int64, suffixes, files []string) { flag.IntVar(&algorithm, "algorithm", 1, "1 or 2") flag.Int64Var(&minSize, "min", -1, "minimum file size (-1 means no minimum)") flag.Int64Var(&maxSize, "max", -1, "maximum file size (-1 means no maximum)") var suffixesOpt *string = flag.String("suffixes", "", "comma-separated list of file suffixes") flag.Parse() if algorithm != 1 && algorithm != 2 { algorithm = 1 } if minSize > maxSize && maxSize != -1 { log.Fatalln("minimum size must be < maximum size") } suffixes = []string{} if *suffixesOpt != "" { suffixes = strings.Split(*suffixesOpt, ",") } files = flag.Args() return algorithm, minSize, maxSize, suffixes, files}我只粘貼了相關(guān)部分,因為這里粘貼太長了。如果需要更多部分或整個部分,我會立即添加。在上面的代碼中,為什么該行flag.IntVar(&algorithm, "algorithm", 1, "1 or 2")沒有返回錯誤?據(jù)我所知,當您使用 時flag.IntVar,您必須algorithm在調(diào)用函數(shù)之前首先定義一個指定為其第一個參數(shù)的變量(在這種情況下) - 否則它會返回一個未定義的錯誤。如果你寫出以下代碼:package mainimport "flag"func main() { flag.IntVar(&a, "a", 0, "test")}如果你執(zhí)行它,你會得到錯誤undefined: a。所以我想知道為什么第一個代碼(由本書作者編寫并且我實際上嘗試運行)沒有返回錯誤,而第二個卻返回錯誤。供您參考,沒有預(yù)定義的變量或常量init(),腳本中也沒有函數(shù)。我還在handleCommandLine()調(diào)用函數(shù)之前檢查了這兩個函數(shù)main()(即runtime.GOMAXPROCS(runtime.NumCPU())和log.SetFlags(0)),但我很確定前者甚至與這個問題無關(guān)。而且我沒有在關(guān)于后者的文檔中得到它的含義,所以也許它導(dǎo)致了問題?
1 回答

慕姐8265434
TA貢獻1813條經(jīng)驗 獲得超2個贊
調(diào)用函數(shù)時會自動創(chuàng)建命名返回值;所以algorithm
在flag.IntVar()
調(diào)用之前已經(jīng)定義了。
- 1 回答
- 0 關(guān)注
- 318 瀏覽
添加回答
舉報
0/150
提交
取消