A switch utasítás kiértékel egy kifejezést, és lefuttatja az első olyan case ágat, amelynek értéke megegyezik a kifejezés értékével.
Gyakran áttekinthetőbb alternatívája a hosszú if ... else if láncoknak.
operatingSystem := "windows"
switch operatingSystem {
case "windows":
// do something if the operating system is windows
case "linux":
// do something if the operating system is linux
case "macos":
// do something if the operating system is macos
default:
// do something if the operating system is none of the above
}
Egyetlen case ágba vesszővel több értéket is csoportosíthatsz.
Az ág akkor illeszkedik, ha a kifejezés bármelyikükkel megegyezik:
switch operatingSystem {
case "windows", "linux":
// do something if the operating system is windows or linux
case "macos":
// do something if the operating system is macos
default:
// do something if the operating system is none of the above
}
A switch utáni kifejezés teljesen el is hagyható.
Ilyenkor minden case ág egy logikai kifejezést tartalmaz, és az fut le, amelyik elsőként true értékre értékelődik.
age := 21
switch {
case age > 20 && age < 30:
// do something if age is between 20 and 30
case age == 10:
// do something if age is equal to 10
default:
// do something else for every other case
}
Az if-hez hasonlóan a switch is tartalmazhat a kifejezés előtt egy rövid inicializáló utasítást.
Az ott deklarált változók scope-ja a switch blokkra korlátozódik:
switch v := getValue(); {
case v < 0:
// do something if v is less than 0
case v == 0:
// do something if v is 0
default:
// do something else for every other case
}
// v will not be accessible here
A fallthrough hatására a következő case ág törzse is lefut, függetlenül attól, hogy annak kifejezése illeszkedne-e.
A case törzsének utolsó utasításaként kell szerepelnie, és lennie kell egy következő ágnak, amely lefuthat.
A fallthrough ritka az idiomatikus Go-ban, mert egymástól függővé teszi a szomszédos case ágakat.
Emiatt nehezebb az egyes ágakat önmagukban átlátni, és a switch is nehezebben olvashatóvá válik.
Ha az ágak viselkedése azonos kell legyen, világosabb, ha vesszővel csoportosítod őket.
Ha más okból osztozik a logika több ágon, érdemes a közös logikát egy segédfüggvénybe kiemelni.
s := "hello"
switch s {
case "hello":
fmt.Println("hello")
fallthrough
case "world":
fmt.Println("world") // also runs, even though s != "world"
}
// Output:
// hello
// world
Ha többet szeretnél megtudni, nézd meg a Go by Example: Switch oldalt vagy a Go nyelvi specifikációt.