Go 为什么此代码不在flag.IntVar上返回错误?
我目前正在阅读一本关于Go的书,看到了以下脚本:Go 为什么此代码不在flag.IntVar上返回错误?,go,flags,Go,Flags,我目前正在阅读一本关于Go的书,看到了以下脚本: package main import ( "flag" "fmt" "log" "os" "path/filepath" "runtime" "strings" ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) // Use all the machine's cores log.SetFlags(0) a
package main
import (
"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
}
如果执行它,就会得到错误
未定义:a
。所以我想知道为什么第一个代码,这是本书的作者写的,我实际上试图运行的代码,没有返回错误,而第二个则返回错误。请注意,脚本中没有预定义的变量或常量,也没有init()
函数。在调用main()
函数之前,我还检查了这两个函数(即runtime.GOMAXPROCS(runtime.NumCPU())
和log.SetFlags(0)
),但我确信前者在这个问题上根本不相关。我没有得到文档中关于后者的含义,所以可能是它导致了问题?调用函数时,会自动创建命名返回值;因此,在调用flag.IntVar()
之前,已经定义了算法。我刚刚注意到我的代码片段被截断了,可能是因为最大长度的限制。但正如您所解释的,实际代码返回命名值。谢谢
package main
import "flag"
func main() {
flag.IntVar(&a, "a", 0, "test")
}