Ce face fallthrough
În Go, un switch execută doar ramura potrivită. fallthrough, pus ca ultimă instrucțiune într-un case, trece direct în corpul ramurii următoare, fără să-i mai verifice valoarea sau condiția.
Se folosește rar, de obicei pentru niveluri care se adună (un nivel mai mare primește și beneficiile celor de sub el). Nu poate apărea în ultima ramură a lui switch și nici într-un type switch.
Exemple
Exemplul 1: Beneficii cumulate pe niveluri
Clientul „aur” primește și beneficiile de „argint” și „bronz”, deși acele condiții nu sunt verificate.
package main
import "fmt"
func beneficii(nivel string) {
fmt.Println("client", nivel+":")
switch nivel {
case "aur":
fmt.Println(" - livrare gratuită")
fallthrough
case "argint":
fmt.Println(" - reducere 10%")
fallthrough
case "bronz":
fmt.Println(" - puncte de fidelitate")
default:
fmt.Println(" - niciun beneficiu")
}
}
func main() {
beneficii("aur")
beneficii("bronz")
beneficii("nou")
}
Rezultat
client aur:
- livrare gratuită
- reducere 10%
- puncte de fidelitate
client bronz:
- puncte de fidelitate
client nou:
- niciun beneficiu
Exemplul 2: fallthrough ignoră condiția ramurii următoare
Deși 5 nu este mai mare decât 100, a doua ramură se execută.
package main
import "fmt"
func main() {
n := 5
switch {
case n > 0:
fmt.Println("pozitiv")
fallthrough
case n > 100:
fmt.Println("ramura „n > 100” s-a executat, deși n =", n)
}
}
Rezultat
pozitiv
ramura „n > 100” s-a executat, deși n = 5
Greșeli frecvente
- Credința că
fallthroughverifică ramura următoare: o execută necondiționat. fallthroughîn ultima ramură:cannot fallthrough final case in switch.fallthroughîn mijlocul unei ramuri sau într-unif: trebuie să fie ultima instrucțiune dincase.
Comenzi înrudite
switch, case și default: Alege una din mai multe ramuri după valoarea unei expresii sau după prima condiție adevărată.type switch: Un switch care alege ramura după tipul concret ținut de o interfață, cu variabila deja convertită.