در زبان Go، توابع میتونن داخل خودشون توابع دیگه تعریف و برگردونن. اگر اون تابع داخلی به متغیرهای خارج از خودش دسترسی داشته باشه، بهش میگیم Closure.
یعنی توابعی که محیط اطرافشون رو بهخاطر میسپارن حتی بعد از خروج از اون محیط.
✅ مثال واقعی: شمارنده با Closure
func counter() func() int {
count := 0
return func() int {
count++
return count
}
}
func main() {
c := counter()
fmt.Println(c()) // 1
fmt.Println(c()) // 2
fmt.Println(c()) // 3
}📌 هر بار که تابع ()c اجرا میشه، مقدار count رو یکی زیاد میکنه، چون اون تابع داخلی به count دسترسی داره و وضعیتش رو حفظ کرده.
🎯 کاربردهای واقعی Closure در Go:
✅ نگهداری وضعیت بدون استفاده از struct
✅ تولید توابع سفارشیشده با دادهی خاص
✅ ساختن توابع داینامیک مثل Middleware، Filter و Validator
✅ پیادهسازی رفتارهای فانکشنال (مثل map، reduce، chain)
🧠 چرا مهمه؟
Closureها بهت این امکان رو میدن که کد تمیزتر، ماژولارتر و با قابلیت ترکیبپذیری بالا بنویسی — بدون نیاز به تعریف نوع یا ساختارهای پیچیده.
#GoLang #Struct #Gin #API #Backend #برنامهنویسی #گو
☕️Telegram | Website | Discord