Closures
Ek closure ek function value hai jo apne khud ke body ke bahar se variables reference karta hai. makeMultiplier har baar call hone par ek naya function return karta hai, aur har return kiya gaya function apna khud ka factor yaad rakhta hai, jo usko banaye jaane ke moment se capture kiya gaya tha.
package main
import "fmt"
func makeMultiplier(factor int) func(int) int {
return func(n int) int {
return n * factor
}
}
func main() {
double := makeMultiplier(2)
triple := makeMultiplier(3)
fmt.Println(double(5))
fmt.Println(triple(5))
}10 15
Closures mutable state hold kar sakte hain
Ek closure sirf captured variables nahi padhta — yeh unhe modify bhi kar sakta hai, aur woh modification calls ke beech persist karti hai. makeCounter ka count variable return kiye gaye closure ke andar zinda rehta hai, har baar next() call hone par increment hote hue.
package main
import "fmt"
func makeCounter() func() int {
count := 0
return func() int {
count++
return count
}
}
func main() {
next := makeCounter()
fmt.Println(next())
fmt.Println(next())
fmt.Println(next())
}1 2 3
Aage: goroutines — Go ka lightweight, built-in concurrency primitive.
Practice exercise
Ek function makeAdder(x int) func(int) int likho jo ek closure return kare jo apne argument mein x add kare. addFive := makeAdder(5) banao, phir addFive(10) print karo.