تحتوي لغة Golang مثل معظم لغات البرمجة الأخرى على عبارة switch . تسمح لك عبارة switch في Golang بتقييم متغير أو تعبير في حالات متعددة ويتم استخدامها غالبًا عند كتابة عبارات if-else متعددة مما يجعل الكود يبدو قبيحًا ومكررًا.

في Go، عبارة switch هي عبارة متفرعة متعددة الاتجاهات تعمل على توجيه التنفيذ بشكل فعال استنادًا إلى قيمة (أو نوع) التعبير. هناك نوعان رئيسيان من عبارات التبديل في Go :
- مفتاح التعبير
- مفتاح النوع
على سبيل المثال:
package main
import "fmt"
func main() {
day := 4
switch day {
case 1:
fmt.Println("Monday")
case 2:
fmt.Println("Tuesday")
case 3:
fmt.Println("Wednesday")
case 4:
fmt.Println("Thursday")
case 5:
fmt.Println("Friday")
default:
fmt.Println("Invalid day")
}
}
بناء جملة العبارة التبديلية في Golang
switch optstatement; optexpression {
case expression1:
// Khối code
case expression2: # Expression Switch
// Khối code
default:
// Khối code
}
switch var := interfaceValue.(type) {
case type1:
// Khối code
case type2: # Type Switch
// Khối code
default:
// Khối code
}
مفتاح التعبير
يقوم Expression Switch بتقييم تعبير ما والتبديل إلى حالة استنادًا إلى قيمة هذا التعبير. إذا لم يتم توفير أي تعبير، فسيتم تعيين المفتاح افتراضيًا على true .
بناء الجملة
switch optstatement; optexpression {
case expression1:
// Khối code
case expression2:
// Khối code
default:
// Khối code
}
optstatement: عبارة اختيارية (على سبيل المثال إعلان المتغير).
optexpression: تعبير اختياري (إذا تم حذفه، يكون الافتراضي هو true ).
مثال مع أمر اختياري
يقدم هنا بيانًا اختياريًا يعلن عن متغير اليوم . ثم يقوم بيان التبديل بتقييم اليوم وفقًا لحالات مختلفة.
package main
import "fmt"
func main() {
switch day := 4; day {
case 1:
fmt.Println("Monday")
case 2:
fmt.Println("Tuesday")
case 3:
fmt.Println("Wednesday")
case 4:
fmt.Println("Thursday")
case 5:
fmt.Println("Friday")
default:
fmt.Println("Invalid day")
}
}
نتيجة:
Thursday
مثال مع تعبير اختياري
إذا لم يتم تحديد أي تعبير، فإن عبارة التبديل في Golang ستفترض أن التعبير صحيح. يتيح لنا هذا استخدام الشروط المنطقية في عبارات الحالة.
package main
import "fmt"
func main() {
day := 4
switch {
case day == 1:
fmt.Println("Monday")
case day == 4:
fmt.Println("Thursday")
case day > 5:
fmt.Println("Weekend")
default:
fmt.Println("Invalid day")
}
}
نتيجة
Thursday
مفتاح النوع
يتم استخدام Type Switch للتفرع على نوع قيمة الواجهة، وليس قيمتها. يعد هذا مفيدًا بشكل خاص عند التعامل مع متغيرات من نوع غير معروف.
بناء الجملة
switch var := interfaceValue.(type) {
case type1:
// Khối code
case type2:
// Khối code
default:
// Khối code
}
على سبيل المثال:
يستخدم هذا المثال متغير اليوم نفسه ولكن مغلفًا في interface{} لتوضيح تحويل النوع.
package main
import "fmt"
func main() {
var day interface{} = 4
switch v := day.(type) {
case int:
switch v {
case 1:
fmt.Println("Monday")
case 2:
fmt.Println("Tuesday")
case 3:
fmt.Println("Wednesday")
case 4:
fmt.Println("Thursday")
case 5:
fmt.Println("Friday")
default:
fmt.Println("Invalid day")
}
default:
fmt.Printf("Unknown type: %T\n", v)
}
}
نتيجة:
Thursday