0Pricing
Go Academy · درس

الماسحات

اقرأ سطرًا سطرًا

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

ما هي bufio.Scanner

تُعد bufio.Scanner أسهل طريقة لقراءة الإدخال رمزًا تلو الآخر، وغالبًا ما تكون القراءة سطرًا سطرًا.

تخفي التخزين المؤقت ومعالجة المحدِّدات، وتزيل محرف السطر الجديد الختامي نيابةً عنك.

مسح الأسطر

أنشئ ماسحًا، ثم كرر باستخدام Scan() الذي يعيد القيمة false عند النهاية. اقرأ الرمز الحالي باستخدام Text().

package main

import (
	"bufio"
	"fmt"
	"strings"
)

func main() {
	s := bufio.NewScanner(strings.NewReader("one\ntwo\nthree"))
	for s.Scan() {
		fmt.Println("line:", s.Text())
	}
}

مسح الكلمات

عيّن دالة التقسيم باستخدام Split(bufio.ScanWords) لتقسيم الإدخال إلى رموز حسب المسافات البيضاء بدلًا من الأسطر.

package main

import (
	"bufio"
	"fmt"
	"strings"
)

func main() {
	s := bufio.NewScanner(strings.NewReader("the quick brown fox"))
	s.Split(bufio.ScanWords)
	for s.Scan() {
		fmt.Println(s.Text())
	}
}

عدّ الرموز

تجعل الماسحات عملية العد بسيطة جدًا. نعدّ الكلمات هنا.

package main

import (
	"bufio"
	"fmt"
	"strings"
)

func main() {
	s := bufio.NewScanner(strings.NewReader("a b c d e"))
	s.Split(bufio.ScanWords)
	count := 0
	for s.Scan() {
		count++
	}
	fmt.Println("words:", count)
}

البايتات مقارنةً بالنص

تعيد Text() نسخة من نوع string. أما Bytes() فتعيد الشريحة الأساسية، ويُعاد استخدامها عند استدعاء Scan() التالي — لذا انسخها إذا كنت بحاجة إلى الاحتفاظ بها.

package main

import (
	"bufio"
	"fmt"
	"strings"
)

func main() {
	s := bufio.NewScanner(strings.NewReader("data"))
	s.Scan()
	fmt.Println(len(s.Bytes()), "bytes")
}

مسح وحدات rune

تقسم bufio.ScanRunes الإدخال إلى وحدات rune بتنسيق UTF-8، بحيث يكون لكل محرف رمز واحد.

package main

import (
	"bufio"
	"fmt"
	"strings"
)

func main() {
	s := bufio.NewScanner(strings.NewReader("Gö"))
	s.Split(bufio.ScanRunes)
	for s.Scan() {
		fmt.Printf("[%s]", s.Text())
	}
	fmt.Println()
}

التحقق من الأخطاء

قد تعني إعادة Scan() للقيمة false الوصول إلى EOF أو حدوث خطأ. بعد انتهاء الحلقة، استدعِ s.Err() للتمييز بينهما.

package main

import (
	"bufio"
	"fmt"
	"strings"
)

func main() {
	s := bufio.NewScanner(strings.NewReader("ok\nfine"))
	for s.Scan() {
		fmt.Println(s.Text())
	}
	if err := s.Err(); err != nil {
		fmt.Println("error:", err)
	}
}

الحد الأقصى لحجم الرمز

افتراضيًا، لا يجوز أن يتجاوز الرمز الواحد bufio.MaxScanTokenSize (بحجم 64KB). يؤدي السطر الأطول إلى توقف Scan() مع حدوث خطأ.

توسيع المخزن المؤقت

استخدم Buffer(buf, max) للسماح برموز أكبر. مرر مخزنًا مؤقتًا ابتدائيًا وحجمًا أقصى.

package main

import (
	"bufio"
	"fmt"
	"strings"
)

func main() {
	s := bufio.NewScanner(strings.NewReader("long line here"))
	buf := make([]byte, 0, 1024)
	s.Buffer(buf, 1024*1024)
	for s.Scan() {
		fmt.Println(s.Text())
	}
}

دوال التقسيم المخصصة

يكون توقيع دالة التقسيم func(data []byte, atEOF bool) (advance int, token []byte, err error). يمكنك التقسيم عند الفواصل أو حسب أطوال ثابتة أو بأي طريقة أخرى.

Scanner مقارنةً بـ Reader

  • Scanner: بسيط، ويدعم رموز الأسطر والكلمات، ويزيل محارف السطر الجديد تلقائيًا، وحده الافتراضي 64KB
  • Reader: تحكم كامل، من دون حد للحجم، ومعالجة يدوية للمحدِّدات

ابدأ باستخدام Scanner، وانتقل إلى Reader عندما تحتاج إلى مزيد من التحكم.

اختبار سريع

اختبر معرفتك بالماسحات.

مراجعة

تعلمت قراءة الإدخال رمزًا تلو الآخر باستخدام bufio.Scanner.

  • حلقة تجمع بين Scan() وText()/Bytes()
  • استخدام Split مع ScanLines/ScanWords/ScanRunes
  • التحقق من Err() بعد انتهاء الحلقة
  • استخدام Buffer مع الرموز التي يتجاوز حجمها 64KB

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

هل درس «الماسحات» مجاني؟

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

ماذا ستتعلم في «الماسحات»؟

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

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

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

كم من الوقت يستغرق درس «الماسحات»؟

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

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

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

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

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