واجهة Writer
اكتب إلى أي وجهة
واجهة Writer درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
الكتابة إلى أي وجهة
توحّد io.Writer كل مخرجات البيانات، مثل الملفات والشبكة والمخازن المؤقتة والإخراج القياسي واستجابات HTTP. واجهة واحدة ووجهات عديدة.
تعريف الواجهة
العقد:
Write(p []byte) (n int, err error)
تكتب هذه الدالة p، ثم تعيد عدد البايتات المكتوبة وأي خطأ قد يحدث.
الكتابة إلى مخزن مؤقت
يطبق bytes.Buffer واجهة io.Writer ويجمع المخرجات في الذاكرة.
package main
import (
"bytes"
"fmt"
)
func main() {
var buf bytes.Buffer
buf.Write([]byte("Hello, "))
buf.WriteString("Writer!")
fmt.Println(buf.String())
}الكتابة إلى Stdout
يُعد os.Stdout كاتبًا من نوع io.Writer. وينطبق ذلك أيضًا على os.Stderr.
package main
import (
"io"
"os"
)
func main() {
io.WriteString(os.Stdout, "straight to stdout\n")
}fmt.Fprintf والكتّاب
تكتب عائلة Fprint نصًا منسقًا إلى أي io.Writer.
package main
import (
"bytes"
"fmt"
)
func main() {
var buf bytes.Buffer
fmt.Fprintf(&buf, "x = %d\n", 42)
fmt.Print(buf.String())
}خطأ الكتابة الجزئية
إذا أعادت Write قيمة n < len(p) مع خطأ قيمته nil، فهذا خرق للعقد يُسمى كتابة جزئية. ويبلغ الكتّاب المتوافقون عن ذلك باستخدام io.ErrShortWrite.
الدوال التي تقبل الكتّاب
اكتب دوالًا تستقبل io.Writer حتى تستهدف المنطق نفسه ملفًا أو مخزنًا مؤقتًا أو الشبكة.
package main
import (
"fmt"
"io"
"os"
)
func greet(w io.Writer, name string) {
fmt.Fprintf(w, "Hi, %s\n", name)
}
func main() {
greet(os.Stdout, "Ada")
}فصل الإخراج للاختبارات
بما أن الدوال تستقبل io.Writer، تلتقط الاختبارات الإخراج داخل bytes.Buffer وتتحقق منه، من دون الحاجة إلى التعامل مع ملفات حقيقية.
package main
import (
"bytes"
"fmt"
)
func emit(w *bytes.Buffer) { fmt.Fprint(w, "result") }
func main() {
var b bytes.Buffer
emit(&b)
fmt.Println("captured:", b.String())
}كتابة البايتات مقابل السلاسل النصية
تستقبل Write شريحة بايتات، بينما تُعد io.WriteString أداة ملائمة للسلاسل النصية وتتجنب حجزًا إضافيًا للذاكرة عندما يدعم الكاتب ذلك.
package main
import (
"io"
"os"
)
func main() {
os.Stdout.Write([]byte("bytes\n"))
io.WriteString(os.Stdout, "string\n")
}تحقق دائمًا من أخطاء الكتابة
قد تفشل الكتابة إلى ملف أو مقبس أثناء التدفق، بسبب امتلاء القرص أو انقطاع الاتصال مثلًا. تحقق من الخطأ المُعاد، لا سيما مع الكتّاب غير المعتمدين على الذاكرة.
واجهة واحدة، ووجهات متعددة
- الملفات والمخازن المؤقتة وstdout/stderr
- كتّاب استجابات HTTP
- أغلفة الضغط والتشفير
كلها تستوفي io.Writer، لذلك تظل شيفرتك مستقلة عن الوجهة.
تحقق سريع
اختبر معرفتك بـ io.Writer.
مراجعة
تعلمت واجهة الإخراج الأساسية.
Write(p []byte) (int, error)هو العقد الكامل- كل من
bytes.Bufferوos.Stdoutواستجابات HTTP يطبّقها - تعمل مع
fmt.Fprintfوio.WriteString - اقبل
io.Writerلإنشاء واجهات برمجية مرنة وقابلة للاختبار
الأسئلة الشائعة
هل درس «واجهة Writer» مجاني؟
نعم — نص درس «واجهة Writer» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «واجهة Writer»؟
اكتب إلى أي وجهة تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «واجهة Writer»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- واجهة Reader
- واجهة Writer
- دوال الأداة io
- تنفيذ قارئات مخصّصة