gpt4 book ai didi

go - 为什么此代码不在 flag.IntVar 上返回错误?

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:17 25 4
gpt4 key购买 nike

我目前正在阅读一本关于 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)
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
}

我只粘贴了相关部分,因为它太长了,无法粘贴到这里。如果需要更多部分或整个部分,我会立即添加。

在上面的代码中,为什么 flag.IntVar(&algorithm, "algorithm", 1, "1 or 2") 行没有返回错误?据我所知,当您使用 flag.IntVar 时,您必须先定义一个指定为它的第一个参数的变量(在本例中为 algorithm),然后再调用函数 -否则它会返回一个未定义的错误。

如果你写出如下代码:

package main
import "flag"
func main() {
flag.IntVar(&a, "a", 0, "test")
}

如果你执行它,你会得到错误 undefined: a。所以我想知道为什么第一个代码(由本书作者编写并且我实际尝试运行)没有返回错误,而第二个代码却返回错误。供您引用,脚本中没有预定义的变量或常量,也没有 init() 函数。我还在 handleCommandLine() 调用 main() 函数之前检查了两个函数,(即 runtime.GOMAXPROCS(runtime.NumCPU())log.SetFlags(0)),但我很确定前者甚至与这个问题无关。我不明白后者在文档中的含义,所以可能是它导致了问题?

最佳答案

命名的返回值在调用函数时自动创建;所以 algorithm 在调用 flag.IntVar() 之前就已经定义好了。

关于go - 为什么此代码不在 flag.IntVar 上返回错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com