Go Programming

قراءة ملفات سطر بسطر بكفاءة في جو (Go)

Spread the love

معالجة الملفات الضخمة بكفاءة أمر بالغ الأهمية للعديد من تطبيقات Go. قراءة الملف سطراً سطراً، بدلاً من تحميل الملف بأكمله في الذاكرة، هي استراتيجية تحسين رئيسية. تشرح هذه المقالة كيفية تحقيق ذلك بكفاءة باستخدام مكتبة Go القياسية، مع التركيز على أفضل الممارسات ومعالجة الأخطاء.

محتويات

استيراد الحزم

سنستخدم بشكل أساسي حزمة bufio لإدخال/إخراج مُخزّن، مما يحسّن الأداء بشكل كبير مقارنة بالقراءة البايتية الخام. تعالج حزمة os عمليات الملفات.


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

القراءة سطراً سطراً باستخدام bufio.Scanner

bufio.Scanner هو الأداة المثالية. يقرأ البيانات على شكل أجزاء، ويخزنها مؤقتاً لتحقيق الكفاءة. تسترد طريقتها Scan() السطر التالي، وتعيد true عند النجاح و false في نهاية الملف.


func processFileLineByLine(filePath string) {
	file, err := os.Open(filePath)
	if err != nil {
		fmt.Printf("خطأ في فتح الملف '%s': %vn", filePath, 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.Printf("خطأ في قراءة الملف '%s': %vn", filePath, err)
	}
}

مثال كامل

يُظهر هذا المثال قراءة ومعالجة الأسطر من ملف اسمه my_file.txt. تذكر إنشاء هذا الملف في نفس الدليل.


package main

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

// ... (دالة processFileLineByLine من الأعلى) ...

func main() {
	filePath := "my_file.txt"
	processFileLineByLine(filePath)
}

ضبط حجم مخزن Scanner

بالنسبة للملفات أو الأسطر الضخمة للغاية، قم بضبط حجم مخزن bufio.Scanner باستخدام scanner.Buffer(). تُقلل المخازن الأكبر من عدد نداءات النظام، ولكنها تستهلك المزيد من الذاكرة. ابحث عن توازن بناءً على خصائص ملفك والموارد المتاحة.


scanner := bufio.NewScanner(file)
bufferSize := 1024 * 1024 // مخزن 1 ميجابايت
scanner.Buffer(make([]byte, bufferSize), bufferSize)

معالجة الأخطاء المتينة

تحقق دائمًا من وجود أخطاء بعد فتح الملف وبعد المسح الضوئي. يضمن بيان defer file.Close() إغلاق الملف حتى في حالة حدوث أخطاء. تساعد رسائل الخطأ الواضحة في تصحيح الأخطاء.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *