تخطَّ إلى المحتوى

os.ReadFile

قراءة ملف كامل دفعة واحدة os.ReadFile

os.ReadFile يقرأ محتوى ملف كاملًا من مساره ويعيده كشريحة بايتات — أبسط طريقة لقراءة ملف صغير أو متوسّط الحجم في Go.

os.ReadFile يفتح الملف المحدَّد بمساره، يقرأ محتواه بالكامل، ثم يغلقه تلقائيًّا — لا حاجة لاستدعاء Close يدويًا كما مع os.Open. يعيد الدالة قيمتين: شريحة بايتات []byte تحوي المحتوى، وerror يكون nil عند النجاح. تُعامَل نهاية الملف (EOF) أثناء القراءة كإتمام ناجح لا كخطأ. عند فشل العملية (ملف غير موجود، صلاحيات ناقصة...)، يكون الخطأ من النوع *PathError الذي يتضمّن اسم العملية والمسار والسبب.

لأنها تحمّل الملف كاملًا بالذاكرة دفعة واحدة، os.ReadFile غير مناسبة للملفات الضخمة جدًا — عندها الأفضل bufio.Scanner أو bufio.Reader لقراءة تدريجية.

الصياغة

func ReadFile(name string) ([]byte, error)

📄 مثال

data, err := os.ReadFile("config.txt")
if err != nil {
  log.Fatal(err)
}
fmt.Println(string(data))

أهم النقاط

العنصرالوظيفة
name stringمسار الملف، نسبي أو مطلق
[]byteمحتوى الملف الكامل كبايتات — حوّله بـ string(data) للنص
*PathErrorنوع الخطأ عند الفشل، يتضمّن اسم العملية والمسار

💡 نصائح عملية

  • تحقّق من err فورًا بعد الاستدعاء — تجاهله يعني قراءة data فارغة أو غير مكتملة دون علمك
  • للملفات الكبيرة أو القراءة سطرًا بسطر استخدم os.Open مع bufio.Scanner بدل تحميل كل شيء بالذاكرة

⚠️ أخطاء شائعة

  • استخدام os.ReadFile لملفات ضخمة (جيجابايتات) — يحاول تحميلها كاملة بالذاكرة دفعة واحدة
  • افتراض أن المسار دائمًا مطلق — المسارات النسبية تُحسَب من مجلد العمل الحالي وقت تشغيل البرنامج، وقد يختلف عمّا يتوقّعه المطوّر

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار GO الكامل بالعربي.