واجهة Reader
تعرّف على أساس إدخال وإخراج Go
واجهة Reader درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
قلب عمليات الإدخال والإخراج في Go
تُعد io.Reader واجهة واحدة توحّد كل مصادر الإدخال في Go، مثل الملفات واتصالات الشبكة والسلاسل النصية والتدفقات المضغوطة وغير ذلك.
يعمل الكود الذي يقبل io.Reader مع أي مصدر.
تعريف الواجهة
العقد صغير:
Read(p []byte) (n int, err error)
تملأ هذه الدالة p بما يصل إلى len(p) من البايتات، ثم تعيد عدد البايتات (n) وخطأً إن وُجد.
القراءة من سلسلة نصية
تحوّل strings.NewReader سلسلة نصية إلى io.Reader.
package main
import (
"fmt"
"strings"
)
func main() {
r := strings.NewReader("Hello")
buf := make([]byte, 5)
n, _ := r.Read(buf)
fmt.Printf("read %d bytes: %s\n", n, buf[:n])
}قاعدة n ثم الخطأ
قد تعيد Read عددًا من البايتات n > 0 وخطأً في الاستدعاء نفسه. عالج دائمًا البايتات وعددها n أولًا، ثم تحقق من الخطأ.
القراءة داخل حلقة
تحتاج معظم القارئات إلى حلقة، لأن عملية Read واحدة قد تعيد عددًا من البايتات أقل من العدد المطلوب.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("abcdef")
buf := make([]byte, 2)
for {
n, err := r.Read(buf)
if n > 0 {
fmt.Printf("%s ", buf[:n])
}
if err == io.EOF {
break
}
}
fmt.Println()
}io.ReadAll
عندما تكون البيانات صغيرة ومحددة الحجم، تقرأ io.ReadAll كل البيانات في شريحة بايتات نيابةً عنك.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("read it all")
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}قارئات من البايتات
تغلف bytes.NewReader شريحة بايتات، وهذا مفيد عندما تكون البيانات موجودة لديك في الذاكرة مسبقًا.
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
r := bytes.NewReader([]byte{72, 105})
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}الدوال التي تقبل القارئات
اكتب دوالًا تقبل io.Reader بدلًا من الأنواع الملموسة. عندها تقرأ الدالة نفسها من ملف أو مقبس أو سلسلة نصية للاختبار.
package main
import (
"fmt"
"io"
"strings"
)
func countBytes(r io.Reader) int {
data, _ := io.ReadAll(r)
return len(data)
}
func main() {
fmt.Println(countBytes(strings.NewReader("hello")))
}io.EOF ليس خطأً
تعامل مع io.EOF كإشارة عادية إلى انتهاء التدفق، وليس كفشل. أما الأخطاء الأخرى وحدها فتشير إلى مشكلات حقيقية.
LimitReader
تغلف io.LimitReader(r, n) قارئًا لإيقافه بعد n من البايتات، وهذا مفيد لتحديد مقدار البيانات التي تقرؤها.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := io.LimitReader(strings.NewReader("abcdefgh"), 3)
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}لماذا تنجح الواجهة الواحدة
- تفصل الكود عن مصادر البيانات
- تجعل الاختبار باستخدام السلاسل النصية والبايتات أمرًا بسيطًا
- يمكن تركيبها بسهولة مع أغلفة مثل LimitReader وgzip وغيرهما
اختبار سريع
اختبر معرفتك بـ io.Reader.
مراجعة
تعلمت واجهة الإدخال الأساسية.
- يشكل
Read(p []byte) (int, error)العقد كاملًا - كرر حتى
io.EOF، وعالج عدد البايتات n أولًا io.ReadAllوstrings/bytes.NewReaderوLimitReader- اقبل
io.Readerفي واجهات برمجة التطبيقات الخاصة بك
الأسئلة الشائعة
هل درس «واجهة Reader» مجاني؟
نعم — نص درس «واجهة Reader» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «واجهة Reader»؟
تعرّف على أساس إدخال وإخراج Go تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «واجهة Reader»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- واجهة Reader
- واجهة Writer
- دوال الأداة io
- تنفيذ قارئات مخصّصة