0Pricing
Go Academy · درس

Sprintf وFprintf

نسّق إلى سلاسل نصية وكُتّاب

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

عائلة Printf

تضم حزمة fmt ثلاث دوال متقاربة للتنسيق:

  • تكتب Printf إلى المخرج القياسي.
  • تعيد Sprintf سلسلة نصية منسّقة.
  • تكتب Fprintf إلى أي writer.
package main

import "fmt"

func main() {
    fmt.Printf("hello %s\n", "world")
}

تعيد Sprintf سلسلة نصية

تنفّذ fmt.Sprintf التنسيق نفسه الذي تنفذه Printf، لكنها، بدلًا من الطباعة، تعيد النتيجة كسلسلة نصية يمكنك تخزينها أو إعادة استخدامها.

package main

import "fmt"

func main() {
    msg := fmt.Sprintf("%s scored %d", "Bob", 95)
    fmt.Println(msg)
}

إنشاء المعرّفات

تكون Sprintf مفيدة لتجميع المفاتيح أو أسماء الملفات أو التسميات من عدة أجزاء.

package main

import "fmt"

func main() {
    id := fmt.Sprintf("user-%04d", 42)
    fmt.Println(id)
}

تنسيق الأعداد لتصبح نصًا

استخدم Sprintf لتحويل الأعداد إلى سلاسل نصية منسّقة بشكل جيد، مثل العملات.

package main

import "fmt"

func main() {
    label := fmt.Sprintf("Price: $%.2f", 7.5)
    fmt.Println(label)
}

تكتب Fprintf إلى writer

تأخذ fmt.Fprintf كائن io.Writer وسيطًا أول، ثم تنسّق النص داخله. ويُعد os.Stdout أحد هذه الكائنات.

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Fprintf(os.Stdout, "to stdout: %d\n", 1)
}

الكتابة إلى الخطأ القياسي

أرسل معلومات التشخيص إلى os.Stderr باستخدام Fprintf، لتبقى منفصلة عن المخرج العادي.

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Fprintf(os.Stderr, "warning: %s\n", "low disk")
}

استخدام Fprintf مع Builder

بما أن strings.Builder هو أيضًا io.Writer، يمكنك تنسيق النص داخله مباشرةً ثم قراءة السلسلة النصية في النهاية.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    fmt.Fprintf(&b, "%s=%d;", "x", 10)
    fmt.Fprintf(&b, "%s=%d", "y", 20)
    fmt.Println(b.String())
}

استخدام Fprintf مع bytes.Buffer

يُعد bytes.Buffer هدفًا شائعًا آخر للكتابة. أنشئ المحتوى تدريجيًا، ثم حوّله إلى سلسلة نصية.

package main

import (
    "bytes"
    "fmt"
)

func main() {
    var buf bytes.Buffer
    fmt.Fprintf(&buf, "row %d\n", 1)
    fmt.Fprintf(&buf, "row %d\n", 2)
    fmt.Print(buf.String())
}

Sprint وFprint من دون f

تأخذ الصيغ التي تحتوي على f سلسلة تنسيق. احذف f لاستخدام Sprint/Fprint، اللتين تكتفيان بضم الوسائط باستخدام التنسيق الافتراضي.

package main

import "fmt"

func main() {
    s := fmt.Sprint("a", 1, true)
    fmt.Println(s)
}

تضيف Sprintln مسافات

تضم fmt.Sprintln الوسائط مع وضع مسافات بينها، وتضيف سطرًا جديدًا، ثم تعيد السلسلة النصية.

package main

import "fmt"

func main() {
    s := fmt.Sprintln("x", 1, "y", 2)
    fmt.Print(s)
}

اختيار الأداة المناسبة

اختر الأداة بناءً على الوجهة:

  • هل تحتاج إلى سلسلة نصية؟ استخدم Sprintf.
  • هل تكتب إلى stdout؟ استخدم Printf.
  • هل تكتب إلى ملف أو مخزن مؤقت أو مسار أخطاء؟ استخدم Fprintf.
package main

import (
    "fmt"
    "os"
)

func main() {
    s := fmt.Sprintf("count=%d", 3)
    fmt.Fprintf(os.Stdout, "%s\n", s)
}

تحقق سريع

أي دالة تعيد النص المنسّق بدلًا من طباعته؟

مراجعة: Sprintf وFprintf

تعلّمت عائلة دوال التنسيق:

  • تعيد Sprintf سلسلة نصية.
  • تكتب Fprintf إلى أي io.Writer، مثل stdout وstderr والمخازن المؤقتة وbuilders.
  • تستخدم الصيغ التي لا تحتوي على f التنسيق الافتراضي.
package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    fmt.Fprintf(&b, "result=%s", fmt.Sprintf("%d%%", 80))
    fmt.Println(b.String())
}

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

هل درس «Sprintf وFprintf» مجاني؟

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

ماذا ستتعلم في «Sprintf وFprintf»؟

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

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

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

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

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

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

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

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

  1. أحرف تنسيق Printf
  2. Sprintf وFprintf
  3. واجهة Stringer
  4. مسح الإدخال
← العودة إلى Go Academy