العمل مع نظام الملفات في Go: للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع نظام الملفات في Go: للمبتدئين



Go (Golang) هي لغة حديثة ومترجمة تشتهر ببساطتها وأدائها وأدواتها المدمجة. إحدى المهام الرئيسية لأي مطور backend هي التفاعل مع نظام الملفات: قراءة الإعدادات، كتابة السجلات، إنشاء الملفات والمجلدات المؤقتة. في هذه المقالة، سنشرح العمليات الأساسية مع الملفات والمجلدات في Go، بدءًا من الأساسيات. المادة موجهة للمبتدئين، لذا ستكون كل خطوة مصحوبة بأمثلة كود واضحة.



الحزم الأساسية للعمل مع الملفات



في المكتبة القياسية لـ Go، هناك حزمتان رئيسيتان للعمل مع نظام الملفات:

  • os — العمل منخفض المستوى مع الملفات والمجلدات وصلاحيات الوصول والعمليات.
  • io/ioutil (قديم في Go 1.16، لكنه لا يزال موجودًا) — دوال ملائمة لقراءة/كتابة الملفات بالكامل.
  • io — واجهات للإدخال/الإخراج التدفقي.
  • bufio — القراءة/الكتابة المخزنة (مفيدة للملفات الكبيرة).


بدءًا من Go 1.16، يُوصى باستخدام الدوال من حزمة os (os.ReadFile, os.WriteFile) بدلاً من ioutil. سنعتمد على النهج الحديث.



قراءة الملفات



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



package main

import ( "fmt" "os")

func main() { // قراءة الملف بالكامل data, err := os.ReadFile("example.txt") if err != nil { fmt.Println("خطأ في قراءة الملف:", err) return } fmt.Println("محتوى الملف:") fmt.Println(string(data))}


إذا كان الملف كبيرًا (مثل ملف سجل بحجم مئات الميغابايت)، فمن الأفضل قراءته سطرًا بسطر أو على شكل كتل باستخدام bufio.Scanner:



package main

import ( "bufio" "fmt" "os")

func main() { file, err := os.Open("bigfile.log") if err != nil { fmt.Println("خطأ في فتح الملف:", err) return } defer file.Close() // نغلق الملف بالتأكيد

scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() fmt.Println(line) // معالجة السطر }

if err := scanner.Err(); err != nil { fmt.Println("خطأ في المسح:", err) }}


لاحظ defer file.Close() — هذا يضمن إغلاق الملف بعد انتهاء الدالة، حتى في حالة حدوث خطأ.



الكتابة في الملفات



لكتابة البيانات إلى ملف، استخدم os.WriteFile (ينشئ/يكتب فوق الملف) أو os.Create + Write (للكتابة بشكل أكثر مرونة).



package main

import ( "fmt" "os")

func main() { // كتابة بسيطة لنص في ملف text := "مرحباً بالعالم!السطر الثاني." err := os.WriteFile("output.txt", []byte(text), 0644) if err != nil { fmt.Println("خطأ في الكتابة:", err) return } fmt.Println("تم كتابة الملف بنجاح")}


المعامل 0644 هو صلاحيات الوصول بنظام Unix (المالك يمكنه القراءة/الكتابة، والباقي يمكنهم القراءة فقط).



إذا كنت بحاجة إلى إضافة بيانات إلى نهاية الملف (إلحاق)، استخدم os.OpenFile مع العلم os.O_APPEND:



package main

import ( "fmt" "os")

func main() { file, err := os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { fmt.Println("خطأ في فتح الملف:", err) return } defer file.Close()

_, err = file.WriteString("إدخال جديد في السجل") if err != nil { fmt.Println("خطأ في الكتابة:", err) }}


العمل مع المجلدات

المدونات

توصيات الكتب