0Pricing
Go Academy · درس

الكتّاب ذوو التخزين المؤقت

اكتب على دفعات

الكتّاب ذوو التخزين المؤقت درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

لماذا تُجرى عمليات الكتابة باستخدام المخزن المؤقت

كما هو الحال مع القراءة، قد تؤدي كل عملية كتابة صغيرة إلى تشغيل استدعاء نظام. تجمع bufio.Writer عمليات الكتابة في الذاكرة، ثم ترسلها على دفعات كبيرة.

مهم جدًا: ستُفقد البيانات المخزنة مؤقتًا ما لم تستدعِ Flush().

إنشاء bufio.Writer

غلّف أي io.Writer. نغلف هنا os.Stdout.

package main

import (
	"bufio"
	"os"
)

func main() {
	w := bufio.NewWriter(os.Stdout)
	w.WriteString("Hello buffered\n")
	w.Flush()
}

لا تنسَ Flush

من دون Flush()، قد لا يظهر إخراجك مطلقًا. ومن الأنماط الشائعة كتابة defer w.Flush().

package main

import (
	"bufio"
	"os"
)

func main() {
	w := bufio.NewWriter(os.Stdout)
	defer w.Flush()
	w.WriteString("written via defer\n")
}

كتابة البايتات والسلاسل النصية

استخدم Write مع شرائح البايتات، وWriteString مع السلاسل النصية، وWriteByte وWriteRune مع القيم المفردة.

package main

import (
	"bufio"
	"os"
)

func main() {
	w := bufio.NewWriter(os.Stdout)
	w.Write([]byte("bytes "))
	w.WriteString("string ")
	w.WriteRune('!')
	w.WriteByte('\n')
	w.Flush()
}

التحقق من حالة المخزن المؤقت

تعرض Buffered() عدد البايتات المنتظرة، بينما تعرض Available() مقدار المساحة الحرة المتبقية.

package main

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

func main() {
	w := bufio.NewWriter(os.Stdout)
	w.WriteString("abc")
	fmt.Fprintf(os.Stderr, "buffered: %d\n", w.Buffered())
	w.Flush()
}

التفريغ التلقائي عند الامتلاء

عند امتلاء المخزن المؤقت، تنفذ bufio.Writer عملية Flush() تلقائيًا. ومع ذلك، يجب عليك استدعاء Flush() في النهاية لإرسال البيانات المتبقية في المخزن غير الممتلئ.

حجم المخزن المؤقت المخصص

تحدد bufio.NewWriterSize(w, size) السعة. تقلل المخازن المؤقتة الأكبر تكرار عمليات التفريغ.

package main

import (
	"bufio"
	"os"
)

func main() {
	w := bufio.NewWriterSize(os.Stdout, 8192)
	w.WriteString("custom size buffer\n")
	w.Flush()
}

عمليات كتابة منسقة باستخدام Fprintf

بما أن bufio.Writer يطبق واجهة io.Writer، يمكنك تمريره إلى fmt.Fprintf لإخراج منسق ومخزن مؤقتًا.

package main

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

func main() {
	w := bufio.NewWriter(os.Stdout)
	for i := 1; i <= 3; i++ {
		fmt.Fprintf(w, "line %d\n", i)
	}
	w.Flush()
}

معالجة أخطاء الكتابة

قد تظهر الأخطاء عند عملية كتابة لاحقة أو عند استدعاء Flush(). تحقق دائمًا من الخطأ الذي يعيده Flush().

package main

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

func main() {
	w := bufio.NewWriter(os.Stdout)
	w.WriteString("data\n")
	if err := w.Flush(); err != nil {
		fmt.Fprintln(os.Stderr, "flush failed:", err)
	}
}

تجميع عمليات كتابة عديدة

الفائدة الحقيقية هي أن حلقة ضيقة من عمليات الكتابة الصغيرة تتحول إلى استدعاء نظام واحد (أو عدة استدعاءات قليلة) بعد التخزين المؤقت.

package main

import (
	"bufio"
	"os"
)

func main() {
	w := bufio.NewWriter(os.Stdout)
	defer w.Flush()
	for i := 0; i < 5; i++ {
		w.WriteString("x")
	}
	w.WriteByte('\n')
}

أفضل الممارسات

  • نفّذ دائمًا Flush() (أو استخدم defer لذلك)
  • تحقق من الخطأ الذي يعيده Flush()، وليس من الخطأ الناتج عن كل عملية كتابة فقط
  • اضبط حجم المخزن المؤقت بما يناسب عبء العمل

اختبار سريع

اختبر معرفتك بالكاتب ذي التخزين المؤقت.

مراجعة

تعلمت تجميع عمليات الكتابة باستخدام bufio.Writer.

  • NewWriter / NewWriterSize
  • Write وWriteString وWriteByte وWriteRune
  • يعمل مع fmt.Fprintf
  • نفّذ دائمًا Flush() وتحقق من الخطأ الذي يعيده

الأسئلة الشائعة

هل درس «الكتّاب ذوو التخزين المؤقت» مجاني؟

نعم — نص درس «الكتّاب ذوو التخزين المؤقت» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «الكتّاب ذوو التخزين المؤقت»؟

اكتب على دفعات تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «الكتّاب ذوو التخزين المؤقت»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. القارئات ذات التخزين المؤقت
  2. الماسحات
  3. الكتّاب ذوو التخزين المؤقت
  4. تدفّق الملفات الكبيرة
← العودة إلى Go Academy