تدفّق الملفات الكبيرة
عالج الملفات دون تحميلها كاملة
تدفّق الملفات الكبيرة درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
مشكلة تحميل كل البيانات
قد تؤدي قراءة ملف حجمه عدة غيغابايتات في الذاكرة باستخدام os.ReadFile إلى استنفاد ذاكرة RAM. بدلًا من ذلك، عالج الملف كتدفق: عالج الأجزاء عند وصولها.
مفهوم التدفق
يعني التدفق الاحتفاظ بنافذة صغيرة فقط من البيانات في الذاكرة في كل مرة. وبدمجه مع التخزين المؤقت، يمكنك معالجة مدخلات كبيرة بلا حد باستخدام ذاكرة ثابتة.
المعالجة سطرًا سطرًا باستخدام Scanner
بالنسبة إلى النصوص، تعالج bufio.Scanner فوق قارئ سطرًا واحدًا في كل مرة، بصرف النظر عن حجم الملف. نحاكي هنا ملفًا باستخدام strings.Reader.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
src := strings.NewReader("alpha\nbeta\ngamma")
s := bufio.NewScanner(src)
for s.Scan() {
fmt.Println("processed:", s.Text())
}
}العد من دون تحميل البيانات
يمكنك حساب الإحصاءات على تدفق ضخم مع الاحتفاظ بقدر ضئيل جدًا من البيانات في الذاكرة.
package main
import (
"bufio"
"fmt"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("a\nbb\nccc"))
total := 0
for s.Scan() {
total += len(s.Text())
}
fmt.Println("total chars:", total)
}أجزاء ذات حجم ثابت
بالنسبة إلى البيانات الثنائية، اقرأ في مخزن مؤقت ثابت الحجم باستخدام Read. يخبرك n بعدد البايتات التي مُلئ بها المخزن.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
src := strings.NewReader("0123456789")
buf := make([]byte, 4)
for {
n, err := src.Read(buf)
if n > 0 {
fmt.Printf("chunk: %s\n", buf[:n])
}
if err == io.EOF {
break
}
}
}استخدام io.Copy للتدفق
تنقل io.Copy(dst, src) كل البيانات من قارئ إلى كاتب كتدفق باستخدام مخزن مؤقت داخلي صغير، من دون تحميل البيانات كاملة.
package main
import (
"io"
"os"
"strings"
)
func main() {
src := strings.NewReader("streamed straight through\n")
io.Copy(os.Stdout, src)
}دمج مخزني القارئ والكاتب المؤقتين
غلّف الطرفين باستخدام bufio لإجراء تحويلات تدفق فعالة: قراءة مخزنة مؤقتًا، ثم معالجة، ثم كتابة مخزنة مؤقتًا، ثم تفريغ.
package main
import (
"bufio"
"os"
"strings"
)
func main() {
r := bufio.NewScanner(strings.NewReader("one\ntwo"))
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
for r.Scan() {
w.WriteString(r.Text() + "!\n")
}
}ضمان استخدام ذاكرة ثابتة
بما أن حجم المخزن المؤقت ثابت، يظل استخدام الذاكرة ثابتًا سواء كان حجم الإدخال 1KB أو 1TB. وهذه هي الميزة الأساسية للتدفق.
تجنب الأخطاء الشائعة
- لا تستدعِ
os.ReadFileمع الملفات الضخمة - عالج دائمًا عدد البايتات
nقبل التحقق من الخطأ - تذكر تنفيذ
Flush()للكتّاب ذوي التخزين المؤقت
تحويل تدفق
نحوّل هنا كل سطر إلى أحرف كبيرة أثناء مروره كتدفق، مع الاحتفاظ بسطر واحد فقط في الذاكرة في كل مرة.
package main
import (
"bufio"
"os"
"strings"
)
func main() {
s := bufio.NewScanner(strings.NewReader("hi\nthere"))
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
for s.Scan() {
w.WriteString(strings.ToUpper(s.Text()) + "\n")
}
}متى تستخدم التدفق
استخدم التدفق عندما يكون حجم الإدخال كبيرًا أو غير معروف، أو عندما يمكنك معالجته تدريجيًا. حمّل البيانات كاملة فقط إذا كانت صغيرة ومحددة الحجم وتحتاج إليها كلها في آن واحد.
اختبار سريع
اختبر معرفتك بالتدفق.
مراجعة
تعلمت معالجة البيانات الكبيرة من دون تحميلها كاملة.
- استخدم Scanner لمعالجة النصوص سطرًا سطرًا
- استخدم
Readذا الحجم الثابت مع الأجزاء الثنائية - استخدم
io.Copyلنقل البيانات من تدفق إلى تدفق - خزّن طرفي العملية مؤقتًا، ونفّذ Flush للكتّاب، وحافظ على ذاكرة ثابتة
الأسئلة الشائعة
هل درس «تدفّق الملفات الكبيرة» مجاني؟
نعم — نص درس «تدفّق الملفات الكبيرة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «تدفّق الملفات الكبيرة»؟
عالج الملفات دون تحميلها كاملة تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «تدفّق الملفات الكبيرة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- القارئات ذات التخزين المؤقت
- الماسحات
- الكتّاب ذوو التخزين المؤقت
- تدفّق الملفات الكبيرة