0Pricing
Go Academy · درس

حزمتا fmt وstrings

تنسيق المخرجات ومعالجة السلاسل النصية

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

نظرة عامة على حزمة fmt

تنفّذ الحزمة fmt عمليات الإدخال والإخراج المنسّقة. ومن أهم دوالها:

  • fmt.Print وfmt.Println وfmt.Printf — تكتب إلى stdout
  • fmt.Sprint وfmt.Sprintf وfmt.Sprintln — تعيد سلاسل نصية
  • fmt.Fprint وfmt.Fprintf — تكتب إلى أي io.Writer
  • fmt.Scan وfmt.Scanf — تقرأ من stdin

رموز تنسيق fmt

رموز التنسيق الشائعة مع fmt.Printf:

package main
import "fmt"

func main() {
    name := "Gopher"
    age := 15
    score := 98.6

    fmt.Printf("%s is %d years old\n", name, age)
    fmt.Printf("Score: %.1f%%\n", score)
    fmt.Printf("Type: %T, Value: %v\n", age, age)
    fmt.Printf("Hex: %x, Binary: %b\n", 255, 255)
    fmt.Printf("Padded: %10s|%-10s\n", name, name)
}

fmt.Sprintf لإنشاء السلاسل النصية

تعيد fmt.Sprintf سلسلة نصية منسّقة دون طباعتها، ولذلك فهي مفيدة لإنشاء السلاسل النصية:

package main
import "fmt"

func formatUser(name string, age int) string {
    return fmt.Sprintf("User{name: %q, age: %d}", name, age)
}

func main() {
    fmt.Println(formatUser("Alice", 30))
    // User{name: "Alice", age: 30}

    // %q adds quotes; %+v prints struct field names
    type Point struct{X, Y int}
    p := Point{1, 2}
    fmt.Printf("%+v\n", p) // {X:1 Y:2}
}

fmt.Errorf لتنسيق الأخطاء

تنشئ fmt.Errorf قيم أخطاء منسّقة:

package main
import "fmt"

func getUser(id int) error {
    return fmt.Errorf("getUser(%d): user not found", id)
}

func main() {
    err := getUser(42)
    fmt.Println(err) // getUser(42): user not found

    // Wrap errors with %w for unwrapping:
    base := fmt.Errorf("base error")
    wrapped := fmt.Errorf("context: %w", base)
    fmt.Println(wrapped)
}

حزمة strings: الدوال الشائعة

توفر الحزمة strings دوال لمعالجة السلاسل النصية:

package main
import ("fmt"; "strings")

func main() {
    s := "  Hello, Go World!  "

    fmt.Println(strings.TrimSpace(s))           // "Hello, Go World!"
    fmt.Println(strings.ToUpper(s))             // "  HELLO, GO WORLD!  "
    fmt.Println(strings.ToLower(s))             // "  hello, go world!  "
    fmt.Println(strings.Contains(s, "Go"))      // true
    fmt.Println(strings.HasPrefix(s, "  Hel")) // true
    fmt.Println(strings.Count(s, "l"))          // 3
}

strings.Split وstrings.Join

تقسم strings.Split سلسلةً نصية، بينما تصل strings.Join شريحةً:

package main
import ("fmt"; "strings")

func main() {
    csv := "alice,bob,carol,dave"
    names := strings.Split(csv, ",")     // ["alice" "bob" "carol" "dave"]
    fmt.Println(names)

    upper := make([]string, len(names))
    for i, n := range names {
        upper[i] = strings.ToUpper(n)
    }
    result := strings.Join(upper, " | ")
    fmt.Println(result) // ALICE | BOB | CAROL | DAVE
}

strings.Replace وstrings.ReplaceAll

استبدل تكرارات سلسلة فرعية:

package main
import ("fmt"; "strings")

func main() {
    s := "foo bar foo baz foo"

    // Replace first 2 occurrences
    fmt.Println(strings.Replace(s, "foo", "XXX", 2))
    // XXX bar XXX baz foo

    // Replace all
    fmt.Println(strings.ReplaceAll(s, "foo", "GO"))
    // GO bar GO baz GO
}

strings.Builder للضم الفعّال

استخدم strings.Builder لإنشاء السلاسل النصية بكفاءة؛ فهو يتجنب تخصيص سلسلة جديدة لكل عملية ضم:

package main
import ("fmt"; "strings")

func join(parts []string, sep string) string {
    var sb strings.Builder
    for i, p := range parts {
        if i > 0 { sb.WriteString(sep) }
        sb.WriteString(p)
    }
    return sb.String()
}

func main() {
    fmt.Println(join([]string{"a", "b", "c"}, "-")) // a-b-c
}

strings.NewReader وstrings.Reader

تنشئ strings.NewReader قيمة io.Reader من سلسلة نصية، وهي مفيدة لاختبار الدوال التي تقبل القارئات:

package main
import ("fmt"; "io"; "strings")

func readAll(r io.Reader) string {
    data, _ := io.ReadAll(r)
    return string(data)
}

func main() {
    r := strings.NewReader("Hello from a string reader")
    fmt.Println(readAll(r))

    // Also: strings.NewReplacer for multiple replacements
    rep := strings.NewReplacer("<", "&lt;", ">", "&gt;")
    fmt.Println(rep.Replace("<b>bold</b>"))
}

strings.Fields وstrings.Map

دوال إضافية مفيدة في strings:

package main
import ("fmt"; "strings")

func main() {
    // Fields splits on any whitespace (like awk)
    words := strings.Fields("  one  two   three  ")
    fmt.Println(words) // [one two three]

    // Map applies a function to each rune
    rot13 := func(r rune) rune {
        if r >= 'a' && r <= 'z' { return 'a' + (r-'a'+13)%26 }
        if r >= 'A' && r <= 'Z' { return 'A' + (r-'A'+13)%26 }
        return r
    }
    fmt.Println(strings.Map(rot13, "Hello, World!"))
}

تحقق سريع

ما الدالة التي ينبغي استخدامها لضم سلاسل نصية كثيرة بكفاءة في Go؟

مراجعة: fmt وstrings

الخلاصة:

  • استخدم fmt.Printf أو Sprintf للإخراج المنسّق أو السلاسل النصية باستخدام رموز التنسيق (%s %d %f %v %T %q)
  • استخدم fmt.Errorf للأخطاء المنسّقة، و%w للتغليف
  • استخدم strings.Split أو Join وContains وReplace وTrimSpace وToUpper/Lower
  • استخدم strings.Builder للضم الفعّال
  • استخدم strings.NewReader لاستخدام السلسلة النصية بوصفها io.Reader

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

هل درس «حزمتا fmt وstrings» مجاني؟

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

ماذا ستتعلم في «حزمتا fmt وstrings»؟

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

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

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

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

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

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

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

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

  1. حزمتا fmt وstrings
  2. ‏strconv وmath وsort
  3. أساسيات حزمة time
  4. حزمتا os وfilepath
← العودة إلى Go Academy