package learning import "fmt" func adder() func(int) int { sum := 0 return func(x int) int { fmt.Println("-------") fmt.Printf("Current sum= %d\n", sum) fmt.Printf("i= %d\n", x) sum += x fmt.Printf("New sum= %d\n", sum) fmt.Println("-------") return sum } } func ClosuresLearning() { pos := adder() for i := 0; i < 10; i++ { fmt.Println( pos(i), ) } } func FibonacciLearning() func() int { fib_sequence := []int{0, 1} var last_element int return func() int { fmt.Println(fib_sequence) if len(fib_sequence) >= 2 { // Get first sum element sumOne := fib_sequence[len(fib_sequence)-1] // Get second sum element sumTwo := fib_sequence[len(fib_sequence)-2] fmt.Println(sumOne) fmt.Println(sumTwo) // sum them up last_element = sumOne + sumTwo fib_sequence = append(fib_sequence, last_element) } last_element = fib_sequence[len(fib_sequence)-1] return last_element } }