strconv وmath وsort
تحويل الأنواع وأدوات الرياضيات والفرز
strconv وmath وsort درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
strconv: تحويل السلاسل النصية
تحوّل الحزمة strconv بين السلاسل النصية والأنواع الأساسية:
package main
import ("fmt"; "strconv")
func main() {
// String to int
n, err := strconv.Atoi("42")
fmt.Println(n, err) // 42 <nil>
// Int to string
s := strconv.Itoa(123)
fmt.Println(s) // "123"
// String to float64
f, _ := strconv.ParseFloat("3.14", 64)
fmt.Println(f) // 3.14
// Float64 to string
fs := strconv.FormatFloat(f, 'f', 2, 64)
fmt.Println(fs) // "3.14"
}strconv.ParseInt وParseBool
حلّل الأعداد الصحيحة مع تحديد الأساس، وحلّل القيم المنطقية:
package main
import ("fmt"; "strconv")
func main() {
// Parse int with base
n, _ := strconv.ParseInt("FF", 16, 64) // hex
fmt.Println(n) // 255
n2, _ := strconv.ParseInt("11111111", 2, 64) // binary
fmt.Println(n2) // 255
// Bool parsing
b1, _ := strconv.ParseBool("true")
b2, _ := strconv.ParseBool("1")
b3, _ := strconv.ParseBool("T")
fmt.Println(b1, b2, b3) // true true true
}معالجة أخطاء strconv
تعامل دائمًا مع أخطاء strconv؛ إذ يعيد الإدخال غير الصالح خطأً مغلفًا داخل *strconv.NumError:
package main
import ("fmt"; "strconv")
func safeAtoi(s string) (int, error) {
n, err := strconv.Atoi(s)
if err != nil {
return 0, fmt.Errorf("invalid integer %q: %w", s, err)
}
return n, nil
}
func main() {
n, err := safeAtoi("abc")
fmt.Println(n, err)
// 0 invalid integer "abc": strconv.Atoi: ...
}أساسيات حزمة math
توفر الحزمة math ثوابت ودوال رياضية:
package main
import ("fmt"; "math")
func main() {
fmt.Println(math.Pi) // 3.141592653589793
fmt.Println(math.E) // 2.718281828459045
fmt.Println(math.Sqrt(16)) // 4
fmt.Println(math.Pow(2, 10)) // 1024
fmt.Println(math.Abs(-5.5)) // 5.5
fmt.Println(math.Floor(3.7)) // 3
fmt.Println(math.Ceil(3.2)) // 4
fmt.Println(math.Round(3.5)) // 4
fmt.Println(math.Log(math.E)) // 1
fmt.Println(math.Log2(8)) // 3
}math.MaxInt وحدود الأعداد العشرية
استخدم ثوابت math لحدود الأعداد الصحيحة والعشرية:
package main
import ("fmt"; "math")
func main() {
fmt.Println(math.MaxInt) // max int (platform-dependent)
fmt.Println(math.MinInt) // min int
fmt.Println(math.MaxInt32) // 2147483647
fmt.Println(math.MaxFloat64) // 1.7976931348623157e+308
fmt.Println(math.SmallestNonzeroFloat64)
fmt.Println(math.IsInf(math.Inf(1), 1)) // true
fmt.Println(math.IsNaN(math.NaN())) // true
}math/rand — الأعداد العشوائية
ولّد أعدادًا عشوائية باستخدام math/rand؛ إذ تُهيّئ Go 1.20 والإصدارات الأحدث البذرة تلقائيًا:
package main
import ("fmt"; "math/rand")
func main() {
// Go 1.20+: automatically seeded
fmt.Println(rand.Intn(100)) // random 0-99
fmt.Println(rand.Float64()) // random [0.0, 1.0)
// Shuffle a slice
s := []int{1, 2, 3, 4, 5}
rand.Shuffle(len(s), func(i, j int) {
s[i], s[j] = s[j], s[i]
})
fmt.Println(s)
}sort.Slice — فرز مخصص سريع
افرز أي شريحة باستخدام مقارن مخصص عبر sort.Slice:
package main
import ("fmt"; "sort")
func main() {
people := []struct{ Name string; Age int }{
{"Alice", 30}, {"Bob", 25}, {"Carol", 35},
}
// Sort by age ascending
sort.Slice(people, func(i, j int) bool {
return people[i].Age < people[j].Age
})
fmt.Println(people)
// [{Bob 25} {Alice 30} {Carol 35}]
}sort.Strings وsort.Ints وsort.Float64s
دوال الفرز المضمّنة لأنواع الشرائح الشائعة:
package main
import ("fmt"; "sort")
func main() {
strs := []string{"banana", "apple", "cherry"}
sort.Strings(strs)
fmt.Println(strs) // [apple banana cherry]
nums := []int{5, 2, 8, 1, 9, 3}
sort.Ints(nums)
fmt.Println(nums) // [1 2 3 5 8 9]
// Check if already sorted:
fmt.Println(sort.IntsAreSorted(nums)) // true
}sort.Search — البحث الثنائي
ينفّذ sort.Search بحثًا ثنائيًا في شريحة مرتبة:
package main
import ("fmt"; "sort")
func main() {
nums := []int{1, 3, 5, 7, 9, 11, 13}
target := 7
i := sort.Search(len(nums), func(i int) bool {
return nums[i] >= target
})
if i < len(nums) && nums[i] == target {
fmt.Printf("Found %d at index %d\n", target, i) // Found 7 at index 3
}
}حزمة slices (Go 1.21 والإصدارات الأحدث)
أضافت Go 1.21 حزمة slices التي تحتوي على دوال عامة للفرز والبحث:
package main
import ("fmt"; "slices")
func main() {
nums := []int{5, 2, 8, 1}
slices.Sort(nums) // in-place sort
fmt.Println(nums) // [1 2 5 8]
strs := []string{"c", "a", "b"}
slices.Sort(strs)
fmt.Println(strs) // [a b c]
idx, found := slices.BinarySearch(nums, 5)
fmt.Println(idx, found) // 2 true
}تحقق سريع
ما الدالة التي تحوّل عددًا صحيحًا إلى تمثيله كسلسلة نصية في Go؟
مراجعة: strconv، math، sort
الملخص:
strconv.Atoi/ItoaوParseFloat/FormatFloatوParseBoolللتحويلاتmath.Sqrt/Pow/Abs/Floor/Ceil/Roundللعمليات الرياضيةmath.MaxInt/MaxFloat64لحدود الأنواعsort.Sliceللفرز المخصص، وsort.Strings/Intsللأنواع البدائيةsort.Searchللبحث الثنائي- الحزمة
slices(في Go 1.21 والإصدارات الأحدث) للبدائل العامة
الأسئلة الشائعة
هل درس «strconv وmath وsort» مجاني؟
نعم — نص درس «strconv وmath وsort» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «strconv وmath وsort»؟
تحويل الأنواع وأدوات الرياضيات والفرز تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «strconv وmath وsort»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- حزمتا fmt وstrings
- strconv وmath وsort
- أساسيات حزمة time
- حزمتا os وfilepath