Треки
/
Go
Go
/
Салабус
/
Умовні конструкції switch
Ум

Умовні конструкції switch у Go

1 вправа

Про концепцію Умовні конструкції switch

Інструкція switch обчислює вираз і запускає перший case, що збігається з його значенням. Часто це чистіша альтернатива довгим ланцюжкам if ... else if.

Базове використання

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
}

Кілька значень можна обʼєднати в один case через кому. case збігається, якщо вираз дорівнює будь-якому з них:

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
}

switch без виразу

Вираз після switch можна й зовсім пропустити. Тоді кожен case містить булевий вираз, і виконується перший із них, що обчислюється як true.

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
}

Інструкція ініціалізації

Як і if, switch може містити коротку інструкцію ініціалізації перед виразом. Змінні, оголошені там, мають область видимості в межах блоку switch:

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

fallthrough

fallthrough змушує виконати тіло наступного case незалежно від того, чи збігається його вираз. Він має бути останньою інструкцією в тілі case, і після нього має бути наступний case.

fallthrough рідко трапляється в ідіоматичному Go, бо робить сусідні case залежними один від одного. Через це окремі case важче аналізувати ізольовано, а сам switch стає важче читати. Коли кілька case мають поводитися однаково, зрозуміліше обʼєднати їх через кому. Якщо ж логіка спільна для кількох case з інших причин, варто винести її в допоміжну функцію.

s := "hello"

switch s {
case "hello":
    fmt.Println("hello")
    fallthrough
case "world":
    fmt.Println("world") // also runs, even though s != "world"
}
// Output:
// hello
// world

Щоб дізнатися більше, зазирніть до Go by Example: Switch або до специфікації мови Go.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці

Вивчити концепцію Умовні конструкції switch