Go is a declared and unused error when I think I did it with a variable

What is wrong with this code?

package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func() int { prev := 0 curr := 1 return func() int { temp := curr curr := curr + prev prev := temp return curr } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } } 

prog.go: 13: prev declared and not used

+7
source share
2 answers

You declared a variable called prev , and then you never used it.

In particular, you said prev := temp . This creates a new local variable in the current scope named prev . I assume that you just wanted to say prev = temp , which modifies the prev variable inherited from the environment. Similarly, you probably wanted to say curr = curr + prev in the previous line instead of using := .

+13
source

If you make the changes proposed by Kevin Ballard , then

 package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func() int { prev := 0 curr := 1 return func() int { temp := curr curr = curr + prev prev = temp return curr } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } } 

Output:

 1 2 3 5 8 13 21 34 55 89 

The output is not a Fibonacci sequence .

For the Fibonacci sequence ,

 package main import "fmt" func fibonacci() func() int { a, b := 0, 1 return func() (f int) { f, a, b = a, b, a+b return } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } } 

Output:

 0 1 1 2 3 5 8 13 21 34 
+2
source

All Articles