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 الكامل بالعربي.