Avatar ·

ماذا يحدث إذا لم يتم إغلاق response.Body في Go؟ تسرب الذاكرة ومشاكل أخرى

مرحباً بالجميع! لقد بدأت للتو في تعلم Go وأكتب عميل HTTP بسيط لجلب البيانات من API. لدي هذا الكود:\n\n```go\nresp, err := http.Get("https://api.example.com/data")\nif err != nil {\n log.Fatal(err)\n}\n// أنا لا أغلق resp.Body\ndata, _ := io.ReadAll(resp.Body)\nfmt.Println(string(data))\n```\n\nكل شيء يعمل، البيانات تصل. لكنني لاحظت أنه في العديد من الأمثلة على Stack Overflow وفي توثيق Go يكتبون `defer resp.Body.Close()`. بصراحة، لا أفهم لماذا هذا ضروري إذا كان البرنامج ينتهي فوراً بعد قراءة البيانات؟ ما الذي يمكن أن يحدث بشكل سيء إذا نسيت إغلاق `response.Body`؟ تسرب الذاكرة؟ تباطؤ البرنامج؟ أم أن هذا ليس مهماً على الإطلاق للبرامج النصية الصغيرة؟ اشرحوا لي، من فضلكم، بطريقة مبسطة ما يحدث تحت الغطاء. شكراً مسبقاً!