go_sandbox/internal/learning/closures.go
2024-11-02 14:07:18 +03:00

47 lines
936 B
Go

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
}
}