حزمتا 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— تكتب إلى stdoutfmt.Sprintوfmt.Sprintfوfmt.Sprintln— تعيد سلاسل نصيةfmt.Fprintوfmt.Fprintf— تكتب إلى أي io.Writerfmt.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("<", "<", ">", ">")
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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- حزمتا fmt وstrings
- strconv وmath وsort
- أساسيات حزمة time
- حزمتا os وfilepath