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 wapas karta hai, aur har wapas kiya gaya function apna khud ka factor yaad rakhta hai, jo usko banaye jaane ke lamhe 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 parhta — yeh unhe modify bhi kar sakta hai, aur woh modification calls ke darmiyan persist karti hai. makeCounter ka count variable wapas 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 likhein jo ek closure wapas kare jo apne argument mein x add kare. addFive := makeAdder(5) banayein, phir addFive(10) print karein.