From this example: https://gobyexample.com/closures If we change:
fmt.Println(nextInt())
fmt.Println(nextInt())
fmt.Println(nextInt())
to
fmt.Println(intSeq())
fmt.Println(intSeq())
fmt.Println(intSeq())
go run
will fail with error: ./prog.go:32:5: Println arg intSeq() is a func value, not called
But from this example: https://gobyexample.com/recursion
fmt.Println(fact(7))
We can call fact(7)
function as fmt.Println
's argument. Why we have difference?
To reckon. When you run Golang playground or any Test in your code, go vet
run first and if it return with error the actual go code doesn't run.
If you go build
, or go run
(tested with 1.12.5) the code run perfectly, printing the function pointer address.
If you copy your code to the tutorial site, here https://tour.golang.org/welcome/1 for example. the code work as you expected.