Lecții din modul (4/5)
Comutator idiomatic
switch Go este mai ergonomic decât C/Java: fiecare case are
propriul bloc implicit (fără break de scris), puteți grupa
valori multiple cu virgulă și un switch fără o expresie se comportă
ca un lanț if/else if mai lizibil.
Porniți o valoare
giorno := "mar"
switch giorno {
case "lun", "mar", "mer", "gio", "ven":
fmt.Println("feriale")
case "sab", "dom":
fmt.Println("weekend")
default:
fmt.Println("sconosciuto")
}case acceptă mai multe valori separate prin virgule și nu există niciun implicit
fallthrough: de îndată ce un caz este executat, comutatorul iese.
Comutați fără condiție
Dacă omiteți expresia, comutatorul evaluează true și fiecare case este un
bool stare. Este alternativa idiomatică la lanțurile lungi 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")
}Declarație inițială
Ca și în cazul if, switch acceptă și o instrucțiune init:
switch n := len(s); {
case n == 0:
fmt.Println("vuoto")
case n > 100:
fmt.Println("lungo")
default:
fmt.Println("ok")
}n există numai în interiorul comutatorului.
fallthrough explicit
Dacă doriți cu adevărat ca execuția să cadă în cazul următor, trebuie să scrieți:
switch 1 {
case 1:
fmt.Println("uno")
fallthrough
case 2:
fmt.Println("due") // anche questo viene stampato
case 3:
fmt.Println("tre") // questo no
}Comutator de tip (previzualizare)
Vă permite să discriminați în funcție de tipul dinamic al unei interfețe valoare. O vom acoperi în profunzime în modulul Interfețe:
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)
}Încearcă
Tipăriți „feriale” pentru lun/mar/mer/gio/ven, „weekend” în caz contrar, folosind un comutator pe valoarea lui g.
Afișează indiciu
Grupați cele 5 zile lucrătoare într-un singur caz, separate prin virgule.
Soluție disponibilă după 3 încercări
Utilizați un comutator FĂRĂ o condiție pentru a imprima „neg”, „zero” sau „pos” în funcție de x.
Afișează indiciu
Nicio expresie după `switch`, doar `{`.
Soluție disponibilă după 3 încercări
Ce imprimă acest program?
switch 1 {
case 1:
fmt.Print("a")
case 2:
fmt.Print("b")
}Recapitulare
caseacceptă mai multe valori separate prin virgulă.- Fără cădere implicită: fiecare caz are propriul său
breakimplicit. switch { ... }fără o expresie = un lanțif/else ifmai lizibil.- Instrucțiunea inițială:
switch x := f(); { ... }, sfera de aplicare limitată la bloc. fallthroughexistă, dar este rar; intră în cazul următor FĂRĂ a evalua starea acestuia.- Tastați comutatorul
v := i.(type)pentru a discrimina în funcție de tipul dinamic (modulul Interfețe).