在此示例中:https://gobyexample.com/closures 如果我们更改:
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
到
fmt.Println(intSeq())
fmt.Println(intSeq())
fmt.Println(intSeq())
go run
将失败,并显示错误:./prog.go:32:5: Println arg intSeq() is a func value, not called
但是从此示例:https://gobyexample.com/recursion
fmt.Println(fact(7))
我们可以将fact(7)
函数用作fmt.Println
的参数。为什么我们有区别?
答案 0 :(得分:1)
估计。
当您在代码中运行Golang游乐场或任何测试时,go vet
首先运行,如果返回错误,则实际的go代码不会运行。
如果您go build
或go run
(已通过1.12.5测试),则代码可以正常运行,并打印函数指针地址。
如果将代码复制到教程站点,例如,这里https://tour.golang.org/welcome/1。代码按预期工作。