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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أحرف تنسيق Printf
- Sprintf وFprintf
- واجهة Stringer
- مسح الإدخال