Go 传递闭包作为函数的参数

Go 传递闭包作为函数的参数,go,closures,Go,Closures,从这个例子中: 如果我们改变: fmt.Println(nextInt()) fmt.Println(nextInt()) fmt.Println(nextInt()) 到 go运行将失败,错误为:./prog.go:32:5:Println arg intSeq是一个func值,未调用 但从这个例子来看: 我们可以将fact7函数称为fmt.Println的参数。我们为什么会有差异呢。 当您在代码中运行Golang Playedy或任何测试时,首先运行go vet,如

从这个例子中: 如果我们改变:

    fmt.Println(nextInt())
    fmt.Println(nextInt())
    fmt.Println(nextInt())

go运行将失败,错误为:./prog.go:32:5:Println arg intSeq是一个func值,未调用

但从这个例子来看:

我们可以将fact7函数称为fmt.Println的参数。我们为什么会有差异呢。 当您在代码中运行Golang Playedy或任何测试时,首先运行go vet,如果返回错误,则实际的go代码不会运行

如果您使用1.12.5进行构建或运行测试,那么代码将完美运行,打印函数指针地址


如果将代码复制到教程站点,例如。代码按预期工作

去跑步不会失败。但是go vet让您知道您没有调用intSeq返回的函数:。@Peter。所以我们必须调用内部anon函数?@TuyenPham不,如果它编译了,它就是一个有效的go程序,不管它是否真的产生了你想要的结果。Vet检查Go源代码并报告可疑结构,例如参数与格式字符串不一致的Printf调用。Vet使用的启发式方法不能保证所有报告都是真实的问题,但它可以发现编译器没有发现的错误。请包含理解问题所需的完整代码。fmt.PrintlnnextInt和fmt.PrintlnintSeq是否应该产生相同的结果?我希望能调用返回的anon函数。
    fmt.Println(intSeq())
    fmt.Println(intSeq())
    fmt.Println(intSeq())
    fmt.Println(fact(7))