שיעורי מודול (4/5)
מתג אידיומטי
switch של Go יותר ארגונומי משל C/Java: לכל case יש את
חסימה מרומזת משלו (אין break לכתיבה), אתה יכול לקבץ
ערכים מרובים עם פסיק ו-switch ללא ביטוי מתנהגים
כמו שרשרת if/else if קריאה יותר.
הפעל ערך
giorno := "mar"
switch giorno {
case "lun", "mar", "mer", "gio", "ven":
fmt.Println("feriale")
case "sab", "dom":
fmt.Println("weekend")
default:
fmt.Println("sconosciuto")
}case מקבל מספר ערכים מופרדים בפסיקים ואין מרומז
fallthrough: ברגע שמבוצע תיק, המתג יוצא.
מתג ללא תנאי
אם תשמיט את הביטוי, המתג יעריך את true וכל case הוא
מצב bool. זוהי האלטרנטיבה האידיומטית לשרשראות if/else if ארוכות:
switch {
case x < 0:
fmt.Println("negativo")
case x == 0:
fmt.Println("zero")
case x < 10:
fmt.Println("piccolo")
default:
fmt.Println("grande")
}הצהרת Init
כמו ב-if, גם switch מקבל הצהרת init:
switch n := len(s); {
case n == 0:
fmt.Println("vuoto")
case n > 100:
fmt.Println("lungo")
default:
fmt.Println("ok")
}n קיים רק בתוך המתג.
מפורש fallthrough
אם אתה באמת רוצה שההוצאה להורג תיפול בתיק הבא, עליך לכתוב את זה:
switch 1 {
case 1:
fmt.Println("uno")
fallthrough
case 2:
fmt.Println("due") // anche questo viene stampato
case 3:
fmt.Println("tre") // questo no
}מתג סוג (תצוגה מקדימה)
זה מאפשר לך להבחין על סמך הסוג הדינמי של ממשק ערך. נעסוק בזה לעומק במודול ממשקים:
var i interface{} = "ciao"
switch v := i.(type) {
case int:
fmt.Println("int:", v)
case string:
fmt.Println("string:", v)
default:
fmt.Printf("tipo %T\n", v)
}נסה את זה
הדפס 'feriale' עבור lun/mar/mer/gio/ven, 'סוף שבוע' אחרת, באמצעות מתג על הערך של g.
הצג רמז
קבץ את 5 ימי השבוע לאותיות בודדות מופרדות בפסיקים.
הפתרון זמין לאחר 3 ניסיונות
השתמש במתג ללא תנאי כדי להדפיס 'neg', '0' או 'pos' בהתאם ל-x.
הצג רמז
אין ביטוי אחרי `מתג`, רק `{`.
הפתרון זמין לאחר 3 ניסיונות
מה התוכנית הזו מדפיסה?
switch 1 {
case 1:
fmt.Print("a")
case 2:
fmt.Print("b")
}לְסַכֵּם
caseמקבל מספר ערכים מופרדים בפסיקים.- ללא נפילה מרומזת: לכל מקרה יש
breakמרומז משלו. switch { ... }ללא ביטוי = שרשרתif/else ifקריאה יותר.- משפט Init:
switch x := f(); { ... }, היקף מוגבל לבלוק. fallthroughקיים אך נדיר; נכנס למקרה הבא מבלי להעריך את מצבו.- הקלד מתג
v := i.(type)כדי להבחין על סמך הסוג הדינמי (מודול ממשקים).